收听注册后的事件是否安全?

我是NodeJS的新手,我正在学习如何使用stream。 读一本书我发现这个示例代码:

var CountStream = require('./countstream'); var countStream = new CountStream('book'); var http = require('http'); http.get('http://www.manning.com', function(res) { res.pipe(countStream); }); countStream.on('total', function(count) { console.log(); }); 

在这个代码片段中,我们调用http.get方法,然后等待callback( 第1部分 )。

在下一行,我们正在听total事件( 第2部分 )。

问题:如果第一部分和第二部分之间发生延迟,那么第一部分的callback会先执行(在第二部分开始监听total事件之前),那么第一个数据块是否会丢失?

不,因为你没有“等待”callback。 callback是asynchronous的 ,并且在http.get函数返回后执行。 第2部分将在调用callback函数(第1部分)之前执行。

构造一个asynchronous事件发射器和注册事件处理程序是完全安全的(只要它是同步发生的),因为事件只会在事件循环的下一个循环中发射。

另请参阅Javascript / Node中隐藏的线程从不执行用户代码:是否有可能,如果是这样,可能会导致竞争条件的一个奥秘的可能性? 。