2015-10-25 179 views
1

在NodeJS中是否可以實現setTimeout版本,該版本在最後一行代碼完成後不會阻止進程退出?非阻塞setTimeout

即條件爲setTimeout的那種僅在該過程仍在運行時纔會觸發回調函數的類型。

實例:

當實現通過設置一些超時初始化本身就是一個庫,你會想,一旦程序完成後,您不需要進行顯式調用到該圖書館清除所有超時,並讓應用程序關閉。

回答

4

如果您希望保留對所有優秀計時器的引用,然後將其作爲應用程序退出進程的一部分清除,但可以使用clearTimeout,其效果是任何unref ed定時器不會阻止節點退出。

例如:

var to = setTimeout(myFunction,delay); 
to.unref(); 

與setInterval的作品,以及

setInterval(myFunction,delay).unref(); 
+0

很好的答案!如果這是可能的話,我還是很悲觀...... :)謝謝! –

+0

@ vitaly-t - 你非常歡迎。我雖然在添加它時非常方便。 –

+0

就這樣,'clearTimeout'部分不應該在答案中,它只是'unref'可用於我提供的示例;) –

0

如果您查看setTimeout的文檔,您會注意到它會通過clearTimeout(obj)返回一個可用於取消超時的timeoutObject。

所以你可以做的就是通過存儲它們的id對象來跟蹤你創建的所有超時。然後,您可以隨時結束所有超時。


如果您只是想退出的過程中,忽略一切,你可以(如果你想返回一個非零的錯誤代碼傳遞一個參數)使用process.exit()

+0

我只是增加了一個例子來說明這個問題的地步。 –

+0

我已經延長了我的答案。 –

+0

謝謝,但巴里約翰遜給出了正確的答案。 –