这里我想证实的是以上的输出都是同步产生的,这段代率攀琅绫腔有什么异步的成分。
- 第一行输出了 "Before executing"
- begin 事宜被触发,输出 "About to execute"
- 真正应当被履行的义务函数被调用,输出 " Executing task "
- end 事宜被触发,输出 "Done with execute"
- 最后输出 "After executing"
就像通俗的回调一样,不要认为事宜意味着同步或异步代码。
跟之前的回调一样,不要一提到事宜就认为它是异步的或者同步的,还要具体分析。
如不雅我们传递 taskFunc 是一个异步函数,会产生什么呢?
- // ...
- withLog.execute(() => {
- setImmediate(() => {
- console.log('*** Executing task ***')
- });
- });
输出结不雅变成了如许:
- Before executing
- About to execute
- Done with execute
- After executing
- *** Executing task ***
要在异步函数完成后发出事宜,我们须要将回调(或 Promise)与基于事宜的通信相结合。 下面的例子说清楚明了这一点。
应用事宜而不是惯例回调的一个好处是,我们可以经由过程定义多个监听器对雷同的旌旗灯号做出多个不合的反竽暌功。如不雅应用回调来完成这件事,我们要在单个回调中写更多的处理逻辑。事宜是应用法度榜样允很多个外部插件在应用法度榜样核心之上构建功能的好办法。你可以把它们当成钩子来挂一些因为状况变更而激发履行的法度榜样。
EventEmitter 模块
异尘事宜
我们把方才那些同步代码的示例改成异步的:
- const fs = require('fs');
- const EventEmitter = require('events');
- class WithTime extends EventEmitter {
- execute(asyncFunc, ...args) {
- this.emit('begin');
- console.time('execute');
- asyncFunc(...args, (err, data) => {
- if (err) {
- return this.emit('error', err);
- }
- this.emit('data', data);
- console.timeEnd('execute');
- this.emit('end');
- });
- }
- }
- const withTime = new WithTime();
- withTime.on(
推荐阅读
市纪委经由过程对大年夜数据云与干部填报的家庭房产等情况的量化数据比对,敏捷排查出漏报瞒报人员,进而大年夜干部工作、生活相干事项着手,抓早抓小、大年夜严监管,教导抢救了大年夜批干部,起到了强大年夜的教导>>>详细阅读
本文标题:[译]理解Node.js事件驱动机制
地址:http://www.17bianji.com/lsqh/36743.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示