在NodeJS中是否可以實現setTimeout
版本,該版本在最後一行代碼完成後不會阻止進程退出?非阻塞setTimeout
即條件爲setTimeout
的那種僅在該過程仍在運行時纔會觸發回調函數的類型。
實例:
當實現通過設置一些超時初始化本身就是一個庫,你會想,一旦程序完成後,您不需要進行顯式調用到該圖書館清除所有超時,並讓應用程序關閉。
在NodeJS中是否可以實現setTimeout
版本,該版本在最後一行代碼完成後不會阻止進程退出?非阻塞setTimeout
即條件爲setTimeout
的那種僅在該過程仍在運行時纔會觸發回調函數的類型。
實例:
當實現通過設置一些超時初始化本身就是一個庫,你會想,一旦程序完成後,您不需要進行顯式調用到該圖書館清除所有超時,並讓應用程序關閉。
如果您希望保留對所有優秀計時器的引用,然後將其作爲應用程序退出進程的一部分清除,但可以使用clearTimeout
,其效果是任何unref
ed定時器不會阻止節點退出。
例如:
var to = setTimeout(myFunction,delay);
to.unref();
與setInterval的作品,以及
setInterval(myFunction,delay).unref();
如果您查看setTimeout的文檔,您會注意到它會通過clearTimeout(obj)
返回一個可用於取消超時的timeoutObject。
所以你可以做的就是通過存儲它們的id對象來跟蹤你創建的所有超時。然後,您可以隨時結束所有超時。
如果您只是想退出的過程中,忽略一切,你可以(如果你想返回一個非零的錯誤代碼傳遞一個參數)使用process.exit()
。
我只是增加了一個例子來說明這個問題的地步。 –
我已經延長了我的答案。 –
謝謝,但巴里約翰遜給出了正確的答案。 –
很好的答案!如果這是可能的話,我還是很悲觀...... :)謝謝! –
@ vitaly-t - 你非常歡迎。我雖然在添加它時非常方便。 –
就這樣,'clearTimeout'部分不應該在答案中,它只是'unref'可用於我提供的示例;) –