一个callBack函数:
function queryDemo(param,callBack){
function sleep(milliSeconds) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + milliSeconds);
}
sleep(10000);
callBack(param);
}
快递代码:
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
答案 0 :(得分:3)
回调将同步执行,除非您将其排队以在事件循环的下一次迭代中运行。这是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()
代替。
答案 1 :(得分:1)
我认为你是用这个紧密循环杀死线程的。为什么要尝试编写自己的睡眠功能而不是built in timers setTimeout
或setInterval
?