NodeJS如何優(yōu)雅的實現(xiàn)Sleep休眠
NodeJS實現(xiàn)Sleep休眠
先打印1,然后1.5秒后打印2
/* 休眠函數(shù)sleep 調(diào)用 await sleep(1500) */ function sleep(ms) { return new Promise(resolve=>setTimeout(resolve, ms)) } async function main() { console.log(1) await sleep(1500) console.log(2) } main()
NodeJS實現(xiàn)一個真正的Sleep,Sleep期間不影響其它線程執(zhí)行
Node.js 是基于 Chrome V8 引擎的 JavaScript 運行環(huán)境,它采用了單線程、事件驅(qū)動和非阻塞I/O模型。
由于JavaScript是單線程的,傳統(tǒng)意義上的線程睡眠(如Java中的Thread.sleep)在Node.js中并不適用,因為那會阻塞整個事件循環(huán),從而影響其他所有任務(wù)的執(zhí)行。
然而,如果你希望實現(xiàn)一個“sleep”效果,同時不阻礙其他異步操作的進行,你可以使用Promise結(jié)合setTimeout來模擬異步等待的效果。
這樣,你可以在等待期間讓出事件循環(huán)給其他任務(wù)處理,模擬并發(fā)執(zhí)行的效果。
以下是一個簡單的示例:
function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function yourAsyncFunction() { console.log('開始執(zhí)行'); await sleep(2000); // 模擬“sleep”2秒 console.log('2秒后繼續(xù)執(zhí)行'); } yourAsyncFunction(); console.log('這句代碼會立即打印,不會被sleep阻塞');
在這個例子中,sleep函數(shù)返回一個Promise,這個Promise在指定的毫秒數(shù)后解析,從而允許使用await關(guān)鍵字在異步函數(shù)中“等待”,而不會阻塞其他代碼的執(zhí)行。
console.log('這句代碼會立即打印,不會被sleep阻塞')會立即執(zhí)行,不受sleep影響,體現(xiàn)了非阻塞特性。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
npm安裝sharp出現(xiàn)的問題詳解(安裝失敗的問題及解決)
這篇文章主要給大家介紹了關(guān)于npm安裝sharp出現(xiàn)的問題(安裝失敗的問題及解決)的相關(guān)資料,sharp包是基于node.js的高性能圖片處理器,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-11-11node.js利用socket.io實現(xiàn)多人在線匹配聯(lián)機五子棋
這篇文章主要介紹了node.js利用socket.io實現(xiàn)多人在線匹配聯(lián)機五子棋的操作方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-05-05