簡體   English   中英

非阻塞setTimeout

[英]Non-blocking setTimeout

在NodeJS中是否有可能實現setTimeout的版本,該版本不會在最后一行代碼完成后阻止進程退出?

也就是說,條件setTimeout的類型僅在進程仍在運行時才觸發回調函數。

實際示例:

當實現通過設置一些超時來初始化自身的庫時,您希望應用程序完成后就無需對該庫進行顯式調用以清除所有超時,並且無論如何都可以關閉應用程序。

如果要維護對所有未完成計時器的引用,然后在應用程序退出過程中將其清除,則可以使用clearTimeout ,但是在node中在unref()上使用unref() Node doc要容易unref 結果是任何未unref計時器都不會阻止Node退出。

例如:

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

也可以與setInterval一起使用

setInterval(myFunction,delay).unref();

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

因此,您可以做的是通過存儲其id對象來跟蹤創建的所有超時。 然后,您可以隨時結束所有超時。


如果您只是想退出該進程,而忽略其他所有內容,則可以使用process.exit() (如果要返回非零錯誤代碼,則傳遞一個參數)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM