2012-06-06 22 views
2

我想觸發setTimeout回調函數,但它似乎不起作用。有什麼問題?如何在Node.js中觸發超時函數?

var fs = require("fs"); 

// set timeout callback 
setTimeout(function(){ 
    console.log("5000ms timeout"); 
    process.exit(0); 
}, 5000); 

// do something more than 5000ms 
while(true) { 
    var stats = fs.statSync("foo"); 
    console.log("while statement running..."); 
} 
當我運行這個

,5S之後,程序仍在運行

回答

2

while(true)是一個嚴密的自旋環路,它防止任何其它異步回調從擊發。不要在單線程環境中執行此操作。您可以使用setInterval,而不是使用while(true)

+0

這就是說,我不能使用'setTimeout'打破while語句嗎? –

+0

當我使用'setInterval'重新空間'while(true)'時,它可以工作。所以我想知道'While(true)'是原子的,我們不能使用'setTimeout'來破解它? –

+0

推薦閱讀:http://ejohn.org/blog/how-javascript-timers-work –

0

我不熟悉node.js,但通常我會期望while循環繼續運行。 JS被阻止。爲了阻止該循環,需要將條件評估爲錯誤。直到循環停止,沒有別的東西會執行。

1

JavaScript是嚴格單線程的。 (除工人)

只要你while循環運行,沒有其他的JavaScript代碼可以在所有執行,包括你setTimeout回調。

相比之下,調用setInterval只是簡單地調度回調以定期運行,但不會暫時阻止該線程。

+0

哦,我明白了。 –

相關問題