[英]Callback not executing asynchronously in Node.js
回調函數:
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
除非您將其排隊以在事件循環的下一次迭代中運行,否則回調將同步執行。 這就是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()
。
我認為您正在使用緊密循環來殺死線程。 為什么要嘗試編寫自己的睡眠函數,而不是內置的計時器 setTimeout
或setInterval
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.