Node.js 浅析事件驱动机制
【摘要】 之前的文章,我们有提到过,Node.js是事件驱动的,我还有说过JS里的click事件,就是一个事件监听,通过这个事件监听,完成相关的处理程序,不过click是监听事件触发并处理程序的这么一个过程。而Node.js的事件机制,我感觉更准确的说,跟前端的事件监听不太一样的是,Node.js的事件机制,更重要的在于处理异步事件以及回调函数的流程,关于Node.js的事件机制的相关知识,结...
之前的文章,我们有提到过,Node.js是事件驱动的,我还有说过JS里的click事件,就是一个事件监听,通过这个事件监听,完成相关的处理程序,不过click是监听事件触发并处理程序的这么一个过程。而Node.js的事件机制,我感觉更准确的说,跟前端的事件监听不太一样的是,Node.js的事件机制,更重要的在于处理异步事件以及回调函数的流程,关于Node.js的事件机制的相关知识,结合所查以及个人的理解,我画了个图:
我们简单解释一下这个流程:前端发起请求,web服务器接收请求,然后将这个条请求放到事件队列里,此时不做任何读写操作,接着执行下面的代码,而放置到事件队列里的事件,回按先进先出的顺序,去处理事件,处理完的结果,放到处理完了的事件队列里,我上图起名叫回调结果队列,然后当程序监听到这个事件被处理完了的时候就会触发回调函数,然后再返回给Node.js的运行结果中。我理解是这样的一个流程,如果有什么不准确或者错误的地方,希望看到的同学批评指正哈~
附上一张通用流程图:
下面我们通过一个小例子来观察一下:
// 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events.EventEmitter(); // 创建事件处理程序 var connectHandler = function connected() { console.log('连接成功。'); // 触发 data_received 事件 eventEmitter.emit('data_received'); } // 绑定 connection 事件处理程序 eventEmitter.on('connection', connectHandler); // 使用匿名函数绑定 data_received 事件 eventEmitter.on('data_received', function(){ console.log('数据接收成功。'); }); // 触发 connection 事件 eventEmitter.emit('connection'); console.log("程序执行完毕。")
运行结果如上图。
以上就是绑定监听事件的处理流程。
在Node.js中,执行异步操作的函数将回调函数作为最后一个参数,而回调函数将接收的错误对象作为第一个参数。在使用的过程中,如果不希望程序遇到问题的时候崩溃,最好优化一下err情况下的处理方式。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)