gpt4 book ai didi

javascript - Node.js 中的回调未异步执行

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:00 24 4
gpt4 key购买 nike

回调函数:

function queryDemo(param,callBack){
function sleep(milliSeconds) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + milliSeconds);
}
sleep(10000);
callBack(param);
}

express 代码:

app.get('/demo', function(req, res){
console.log(1);
queryDemo(JSON.stringify(req.query),function(result){
console.log(2);
});
console.log(3);
});

然后浏览http://127.0.0.1/demo,控制台输出为

1
//wait 10 seconds here
2
3

我认为正确的输出应该是:

1
3
// 10 seconds later
2

最佳答案

回调将同步执行,除非您将其排队以在事件循环的下一次迭代中运行。这就是process.nextTick()用于。

function queryDemo(param, callback) {
function sleep(milliseconds) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + milliseconds);
}
sleep(10000);
process.nextTick(function() {
callback(param);
});
}

但是,如果您使用它,您仍然会阻止应用程序并获得以下输出:

1
// 10 second pause
3
2

要延迟函数本身的执行,然后对函数本身的调用进行排队:

process.nextTick(function() {
queryDemo(JSON.stringify(req.query), function(result) {
console.log(2);
});
});

另请注意,您的 sleep() 函数仍会阻止应用程序,因此您应该改用 setTimeout()

关于javascript - Node.js 中的回调未异步执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19042056/

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