对于learnyounode node.js教程,console.log打印语句的顺序错误

时间:2014-08-15 02:39:07

标签: javascript node.js http

我正在发出GET请求,存储数据,然后注意响应已结束。我收到数据时有一个console.log语句,程序完成时有另一个var a = 1 var b = 10e9 http.get(process.argv[2], function(response){ response.pipe(bl()) response.on('end', function(){ console.log("Finished receiving data") }) }) while(a != b){ a++ } console.log("Program has finished") 语句。见下文:

Finished receiving data
Program has finished

在这种情况下,我希望print语句的顺序是

while

因为我希望响应的结束在Program has finished Finished receiving data 循环终止之前发生。但是,无论该循环是1还是1还是1到100000000000,我总是得到

{{1}}

为什么打印报表按此顺序发生?

1 个答案:

答案 0 :(得分:2)

对于其异步表达性的所有大惊小怪,node.js是单线程的,每个进程只有一个执行线程 - 这意味着一次只能执行一行代码。

当您对http.get进行异步调用时,node.js发送HTTP GET并推迟执行回调,直到(1)回调准备好被调用,(2)它用完了同步(阻止)代码运行。这解释了为什么你总是首先看到"Program is finished" - node.js已经完成了阻塞代码的执行,并准备继续处理包含"Finished receiving data"的异步回调。