gpt4 book ai didi

javascript - learnyounode node.js 教程的 console.log 打印语句顺序错误

转载 作者:搜寻专家 更新时间:2023-11-01 00:44:01 25 4
gpt4 key购买 nike

我正在制作 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)它用完了要运行的同步(阻塞)代码。这解释了为什么您总是首先看到 “程序已完成” - node.js 已完成其阻塞代码的执行并准备好继续处理包含 “已完成接收数据”的异步回调

关于javascript - learnyounode node.js 教程的 console.log 打印语句顺序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25320512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com