从Node.js事件触发器到Vue自定义事件的深入讲解_node.js

来源:脚本之家  责任编辑:小易  

1.未捕获异常带来的问题由于 Node.js 的单线程特性,未捕获异常是一个应用开发过程中值得注意的问题。Node.js 遵循错误第一,数据第二的回调模式。我们经常在看到这样的例子:当回调函数返回一个错误对象,那就立即抛出这个错误。var fs=require('fs');fs.readFile('somefile.txt',function(err,data){ if(err)throw err;console.log(data);});如果你运行这个程序,而且假设你没有 somefile.txt 这个文件,一个错误将被抛出。Error:ENOENT,open 'somefile.txt'这将导致进程崩溃进而影响到整个APP。这是有意为之,Node.js 不打算把你的应用和服务分隔开。2.怎样处理未捕获异常处理未捕获异常的最佳方式是什么呢?有非常多方法:你的应用不应该有未捕获错误,这很疯狂。你应该让你的应用在崩溃后找到未捕获异常,然后修复它们,这也很疯狂。对错误视而不见,不处理它—这是大多数人做的,然而这糟透了。你应该让你的应用在崩溃后打印出错误日志,然后借用 upstart,forever,monit 之类的东西重启进程。这个方法很实用。【译者注:现已废弃】你应该开始使用 Domains 模块来处理错误,这是必由之路,虽然这还是 Node.js 的一个试验性功能。现在我们来详细展开这些方法。3.一个没有未捕获异常的应用没有未捕获异常的应用」这个概念对我来说很怪异,任何应用在某个时刻都会有异常而且可能是未捕获的异常。如果你坚持这个观点并把错误扔给用户,那么我觉得你要做好半夜接到电话被告知服务崩溃掉了的准备。4.使你的应用崩溃The only defence I can find in this opinion is the fail fast argument.You are going to fix your application quickly if it unavailable.If an application without uncaught exceptions is denial letting your application crash is acceptance.But you are still pushing exception handling onto your users.(原谅我实在想不出怎么翻译这段,如果你有好的想法,请尽快联系我!5.假装没看见错误?很多人这样做:1;process.on('uncaughtException',function(err){console.log(err);})</p>这很糟糕,当一个未捕获异常被抛出,你应该意识到你的应用处在一个不正常的状态,这种情况下你无法可靠地运行你的程序。最初提出 process.on 事件的 Felix Geisend?rfer 现在倡议去除它。6.应用崩溃,打印日志,然后重启通过这个方法你可以让你的应用在发生未捕获异常时立即崩溃,然后利用 forever 或 upstart 这样的工具(几乎可以)立即重启。Node.js 将会把异常写入 STERR 所以你可以把异常重定向到一个日志文件稍晚再通过它拿到错误。这种方法的缺点是,对于错误发生在你的代码之外的 i/o,不能提供一种优雅的方法来处理临时停电或者网络 i/o 出错的场景。这真是一个利器!重启应用并重试。如果你把这种策略与 cluster module 相结合,node 可以自动重启任何抛出错误的 children 并且打印出错误。var cluster=require('cluster');var workers=process.env.WORKERS|require('os').cpus().length;if(cluster.isMaster){ console.log('start cluster with%s workers',workers);for(var i=0;i;i){ varworker=cluster.fork().process;console.log('worker%s started.',worker.pid);} cluster.on('exit',function(worker){ console.log('worker%s died.restart.',worker.process.pid);cluster.fork();});} else { var http = require('http');http.createServer(function(req,res){ res.end("Look Mum!I'm a server!\\n");}).listen(3000,"127.0.0.1");}process.on('uncaughtException',function(err){ console.error((new Date).toUTCString()+' uncaughtException:',err.message)console.error(err.stack)process.exit(1)})7.使用 Domains 模块【译者注:现已废弃】Domains 是 Node.js v0.8 版本中新增的一个试验性特性,它使得异常处理变得更加灵活和精确。下面是刚才那个文件不存在的例子,通过使用 domains 你可以为一个特定的 domain 触发 error 事件,你还可以针对不同的场景使用不同的异常处理。这使得你根据异常的发生地点来对应地处理它们。如果退出进程像是用榔头敲碎坚果,那么这就像一把精确的手术刀为你提供对程序完全的控制。var domain=require('domain');var d=domain.create();var fs=require('fs');d.on('error',function(err){ console.error(err);});d.run(function(){ fs.readFile('somefile.txt',function(err,data){ if(err)throw err;console.log(data);});});8.结论如果你在产品环境运行 Node.js 你起码应该对如何处理异常有一个想法。目前为止我相信当异常被抛出时,大多数人只是重启应用(也许是优雅地重启),Domains 为应用提供了一种更聪明的面对异常的能力,异常处理器可能会选择简单的清理、关闭某些连接,最坏的情况下,退出进程。关键点就在于你有了选择www.zgxue.com防采集请勿采集本网。

Node.js中的事件触发器所引发的思考

因为它不去为每个客户端创建一个新的线程,而是为每个客户端连接触发一个在node.js内部进行处理的事件(使我想到了写页面jquery的时候各种事件)。如果使用node.js,可以同时处理多达几万个用户的客户端连接

今天在看 Node.js 文档的时候讲到事件触发器,其中的 emit 方法让我想到了 Vue 中的自定义事件,借此我对 Vue 又有了新的理解,所以将我的理解记录下来,留作学习笔记。

施密特触发器有两个阈值copy电压,分别称为正向阈值电压和负向阈值电压。1.在输入信号从低电平上升到高电平的过程中使电路状态发生变化的输入知电压称为正向阈值电压(Vt+)。2.在输入信号从高电

Node.js中的事件触发器

因此从Node.js 8开始,使用new Buffer(Number)或Buffer(Number)分配的Buffers会被ZEROS自动填充。将V8升级到5.8:TurboFan&Ingnition 使用Node.js 8版本,底层的V8 Java引擎也会更新。对于Node.js用户来

Node.js 为我们提供了一个事件模块:EventEmitter,我们可以用它来处理事件

如果加载图片和媒体内容花费了大量时间,用户就会感受到定义在onload事件上的代码在执行时有明显的延迟。2.onload:document.ready函数只需对 DOM 树的等待,而无需对图像或外部资源加载的等待,从而执行

const EventEmitter = require('events')const eventEmitter = new EventEmitter()

eventEmitter 对象上有两个方法:on 和 emit on 用于添加自定义事件,注册回调函数 emit 用于触发事件,并将参数传递给回调函数

eventEmitter.on('start', (e) => { console.log(e)})eventEmitter.emit('start', 'started')

控制台将会打印 started

Vue中的自定义事件

给组件添加自定义事件,下面示例代码中的 enlarge-text 事件就是我们自己定义的事件,onEnlargeText 则是事件触发时所要执行的回调函数,这里的 onEnlargeText 是一个函数指针,指向 methods 中所定义的 onEnlargeText 函数。既然是回调函数,所以可能会有参数传给它,那么自定义事件的回调函数中的参数是谁传递给它的,具体含义又是什么呢?

<blog-post ... @enlarge-text="onEnlargeText"></blog-post>methods: { onEnlargeText: function (enlargeAmount) { this.postFontSize += enlargeAmount }}

子组件事件处理中可以通过内建的 「$emit」 方法传入父组件自定义事件名来触发这个自定义事件,并且通过 「$emit」 的第二个参数将需要传递给父组件的数据抛出,这样,自定义事件的回调函数中的参数来源也就明白了,就是 「$emit」 方法的第二个参数,这里可以直接抛出一个更加灵活的对象。

<button @click="$emit('enlarge-text', 0.1)"> Enlarge text</button>

到这里我们可以看到,Vue 中的自定义事件和 Node.js 中的事件触发器的理念非常相似,Vue 中自定义事件的注册是在父组件中完成的,而触发是在子组件中完成的。至此,就完成了对 Vue 自定义事件的解释。

参考资源

nodejs.cn/learn/the-n…

cn.vuejs.org/v2/guide/co…

总结

到此这篇关于从Node.js事件触发器到Vue自定义事件的文章就介绍到这了,更多相关Node.js事件触发器到Vue自定义事件内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

在子框的事件处理函数中键入以下代码试试。IE:window.event.cancelBubble=true;window.event.returnValue=false;Firefox:event.preventDefault();event.stopPropagation();内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • node.js中事件触发器events的使用方法实例分析
  • vue自定义事件(详解)
  • vue dom加载后执行自定义事件的方法
  • vue子组件使用自定义事件向父组件传递数据
  • 浅谈vue.js 组件中的v-on绑定自定义事件理解
  • vue.js自定义事件的表单输入组件方法
  • vue.js组件通信之自定义事件详解
  • vue组件之自定义事件的功能图解
  • vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
  • nodejs中使用http分块响应和定时器示例代码
  • express文件上传中间件multer详解
  • 10个最优秀的node.js mvc框架
  • nodejs中使用puppeteer控制浏览器中视频播放功能
  • nodejs微信开发之授权登录+获取用户信息
  • node.js二进制操作模块buffer对象使用方法详解
  • 如何利用node.js与json搭建简单的动态服务器
  • 利用node实现一个批量重命名文件的函数
  • 我的node.js学习之路(三)--node.js作用、回调、同步和异步代码
  • node.js中bootstrap-table的两种分页的实现方法
  • js几个事件同时触发
  • Node.js 中的未捕获异常怎么解决
  • JS问题,onclick触发事件,怎么获取onclick
  • 如何用node.js模拟多线程
  • net程序员需要学nodejs吗
  • 施密特触发器的阀值电压是多少?
  • Nodejs 8有哪些重要功能和修复
  • document.ready和onload的区别
  • cg125发动机磁电机出线一共几根,每根,都是代表什么意思
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础知识javascript类库表单特效广告代码网页特效黑客性质javascript技巧domnode.jsjs其它首页javascriptnode.jsnode.js中事件触发器events的使用方法实例分析vue自定义事件(详解)vue dom加载后执行自定义事件的方法vue子组件使用自定义事件向父组件传递数据浅谈vue.js 组件中的v-on绑定自定义事件理解vue.js自定义事件的表单输入组件方法vue.js组件通信之自定义事件详解vue组件之自定义事件的功能图解vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】nodejs中使用http分块响应和定时器示例代码express文件上传中间件multer详解10个最优秀的node.js mvc框架nodejs中使用puppeteer控制浏览器中视频播放功能nodejs微信开发之授权登录+获取用户信息node.js二进制操作模块buffer对象使用方法详解如何利用node.js与json搭建简单的动态服务器利用node实现一个批量重命名文件的函数我的node.js学习之路(三)--node.js作用、回调、同步和异步代码node.js中bootstrap-table的两种分页的实现方法一行命令搞定node.js 版本升级卸载安装node.js与npm过程详解yarn的安装与使用详细介绍node.js(安装,启动,测试)nodejs中调用系统命令、shell脚本node.js+ajax实现获取http服务器nodejs npm install全局安装和本nodejs基本语法和类型node.js中的fs.writefilesync方法nodejs学习笔记之fs文件模块nodejs中实现路由功能使用koa-log4管理nodejs日志笔记的使用方windows实现npm和cnpm安装步骤koa上传excel文件并解析的实现方法利用express启动一个server服务的方法浅谈在koa2中实现页面渲染的全局数据node.js之网络通讯模块实现浅析利用chrome devtools直接调试node.js和janode.js domain 模块实例详解node.js中看javascript的引用
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved