learnyounode#9杂耍asynchronous,可以正式解决吗?

所以我现在正在学习node.js,并且之前做了一些多任务处理,而我的概念是asynchronous和多任务处理有许多类似的isses,这就引出了我的问题。

这个问题的官方解决scheme是:

var http = require('http') var bl = require('bl') var results = [] var count = 0 function printResults () { for (var i = 0; i < 3; i++) console.log(results[i]) } function httpGet (index) { http.get(process.argv[2 + index], function (response) { response.pipe(bl(function (err, data) { if (err) return console.error(err) results[index] = data.toString() //AREA OF INTEREST START count++ if (count == 3) printResults() //AREA OF INTEREST END })) }) } for (var i = 0; i < 3; i++) httpGet(i) 

注意'AREA OF INTEREST'部分的评论。 在这里是否有可能导致printResults函数被多次调用?

例如,所有三个'end'callback同时进行,每一个都依次执行count++ (所以count == 3检查在任何callback中还没有发生,但是count已经增加了三次),现在他们每个都会检查count == 3条件,这将是真实的,从而调用printResults三次

这是可能的,官方的解决scheme有些缺陷,或者我误解了一些概念?

不,竞争条件对于该代码不是问题。 callback运行在一个线程中。 他们不会同时并行运行。 他们将连续运行。

有关callback如何排队以及代码中没有竞争条件的更多信息,您可以select观看由Philip Roberts编写的一个名为“事件循环到底是什么? 。