我正在从node.js网站上阅读this article。在某些时候,他们评论以下片段:
const server = net.createServer(() => {}).listen(8080);
server.on('listening', () => {});
仅传递端口时,端口立即绑定。所以,“倾听”'可以立即调用回调。问题是那时候不会设置.on(' listen')回调。
为了解决这个问题,“听”'事件在nextTick()中排队 允许脚本运行完成。这允许用户设置任何 他们想要的事件处理程序。
但是,浏览node.js source code时,情况似乎并非如此。
listening
似乎没有包含在process.nextTick()
调用中,而显式的nextTick调用确实存在于代码中的其他位置。
我错过了什么?
答案 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');
}
然后激活事件。因此,在服务器启动后,事件将被触发一次。