作家
登录

[译]理解Node.js事件驱动机制

作者: 来源: 2017-08-16 12:04:42 阅读 我要评论

, oddCount); 
  •   } catch(err) { 
  •     console.error(err); 
  •   } 
  • countOdd();  
  • 起首,我们创建了一个 async 函数 —— 就是一个通俗的函数声明之前,加了个 async 关键字。在 async 函数内部,我们调用了 readFileAsArray 函数,就像把它的返回值赋值给变量 lines 一样,为了真的拿到 readFileAsArray 处理生成的行数组,我们应用关键字 await。之后,我们持续履行代码,就似乎 readFileAsArray 的调用是同步的一样。

    要让代码运行,我们可以直接调用 async 函数。这让我们的代码变得加倍简单和易读。为了处理异常,我们须要将异步调用包装在一个 try/catch 语句中。

    有了 async/await 这个特点,我们不必应用任何特别的API(如 .then 和 .catch )。我们只是把这种函数标记出来,然后应用纯粹的 JavaScript 写代码。

    我们可以把 async/await 这个特点用在支撑应用 Promise 处理后续逻辑的函数上。然则,它无法用在只支撑回调的异步函数上(例如setTimeout)。

    EventEmitter 是一个处理 Node 中各个对象之间通信的模块。 EventEmitter 是 Node 异尘事宜驱动架构的核心。 Node 典范多内置模块都持续自 EventEmitter。

    它的概念其实很简单:emitter 对象会发出被定义过的事宜,导致之前注册的所有监听该事宜的函数被调用。所以,emitter 对象根本上有两个重要特点:

    • 触发定义过的事宜
    • 注册或者撤消注册监听函数

    为了应用 EventEmitter,我们须要创建一个持续自 EventEmitter 的类。

    1. class MyEmitter extends EventEmitter { 
    2.  
    3.  

    我们大年夜 EventEmitter 的子类实例化的对象,就是 emitter 对象:

    1. const myEmitter = new MyEmitter(); 

    在这些 emitter 对象的生命周期里,我们可声调用 emit 函数来触发我们想要的触发的任何被定名过的事宜。

    1. myEmitter.emit('something-happened'); 

    emit 函数的应用表示产生某种情况产生了,让大年夜家去做该做的工作。 这种情况平日是某些状况变更引起的。

    我们可以应用>

  • const EventEmitter = require('events'); 
  •  
  • class WithLog extends EventEmitter { 
  •   execute(taskFunc) { 
  •     console.log('Before executing'); 
  •     this.emit('begin'); 
  •     taskFunc(); 
  •     this.emit('end'); 
  •     console.log('After executing'); 
  •   } 
  •  
  • const withLog = new WithLog(); 
  •  
  • withLog.on('begin', () => console.log('About to execute')); 
  • withLog.on('end', () => console.log('Done with execute')); 
  •  
  • withLog.execute(() => console.log('*** Executing task ***'));  
  • WithLog 是一个事宜触发器,它有一个办法 —— execute,该办法接收一个参数,即具体要处理的义务函数,并在其前后担保 log 以输出其履行日记。

    error 事宜比较特别。在我们基于回调的那个示例中,如不雅不应用监听器处理 error 事宜,node 过程将会退出。

    如许就有问题了,异步函数的调用导致 "Done with execute" 和 "After executing" 的输出场不精确。

    为了看到这里会以什么次序履行,我们在两个定名的事宜上都注册了监听器,最后履行一个简单的义务来触发事宜。

    下面是膳绫擎法度榜样的输出结不雅:

    1. Before executing 

        推荐阅读

        反腐有了大数据“侦探”

      市纪委经由过程对大年夜数据云与干部填报的家庭房产等情况的量化数据比对,敏捷排查出漏报瞒报人员,进而大年夜干部工作、生活相干事项着手,抓早抓小、大年夜严监管,教导抢救了大年夜批干部,起到了强大年夜的教导>>>详细阅读


      本文标题:[译]理解Node.js事件驱动机制

      地址:http://www.17bianji.com/lsqh/36743.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)