Node.js process.nextTick&网络的听力活动

时间:2018-03-26 13:51:35

标签: javascript node.js

我正在从node.js网站上阅读this article。在某些时候,他们评论以下片段:

const server = net.createServer(() => {}).listen(8080);

server.on('listening', () => {});
  

仅传递端口时,端口立即绑定。所以,“倾听”'可以立即调用回调。问题是那时候不会设置.on(' listen')回调。

     

为了解决这个问题,“听”'事件在nextTick()中排队   允许脚本运行完成。这允许用户设置任何   他们想要的事件处理程序。

但是,浏览node.js source code时,情况似乎并非如此。

listening似乎没有包含在process.nextTick()调用中,而显式的nextTick调用确实存在于代码中的其他位置。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

实际上这个事件是在这里触发的:

 defaultTriggerAsyncIdScope(this[async_id_symbol],
                         process.nextTick,
                         emitListeningNT,
                         this);

这基本上只是使用参数process.nextTick调用emitListeningNT, this。因此,在一次打勾后,这称为:

 function emitListeningNT(self) {
   // ensure handle hasn't closed
  if (self._handle)
    self.emit('listening');
 }

然后激活事件。因此,在服务器启动后,事件将被触发一次。