Node.js 浅析事件驱动机制

举报
bjxingch 发表于 2020/09/13 15:43:28 2020/09/13
【摘要】 之前的文章,我们有提到过,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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。