我正在做一个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
因为我希望响应结束之前发生while
循环终止。然而,无论该循环是 1 到 2 还是 1 到 100000000000,我总是得到
Program has finished
Finished receiving data
为什么打印语句按这个顺序发生?
对于其异步表达能力的所有争论,node.js 是单线程的,每个进程只有一个执行线程 - 这意味着一次只会执行一行代码。
当您进行异步调用时http.get
,node.js 发送 HTTP GET 并推迟回调的执行,直到 (1) 回调准备好被调用并且 (2) 它用完要运行的同步(阻塞)代码。这解释了为什么你总是看到"Program is finished"
首先 - Node.js 已完成执行其阻塞代码,并准备好继续处理包含以下内容的异步回调:"Finished receiving data"
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)