NodeJS如何優(yōu)雅的實(shí)現(xiàn)Sleep休眠
NodeJS實(shí)現(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實(shí)現(xiàn)一個(gè)真正的Sleep,Sleep期間不影響其它線程執(zhí)行
Node.js 是基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境,它采用了單線程、事件驅(qū)動(dòng)和非阻塞I/O模型。
由于JavaScript是單線程的,傳統(tǒng)意義上的線程睡眠(如Java中的Thread.sleep)在Node.js中并不適用,因?yàn)槟菚?huì)阻塞整個(gè)事件循環(huán),從而影響其他所有任務(wù)的執(zhí)行。
然而,如果你希望實(shí)現(xiàn)一個(gè)“sleep”效果,同時(shí)不阻礙其他異步操作的進(jìn)行,你可以使用Promise結(jié)合setTimeout來模擬異步等待的效果。
這樣,你可以在等待期間讓出事件循環(huán)給其他任務(wù)處理,模擬并發(fā)執(zhí)行的效果。
以下是一個(gè)簡單的示例:
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('這句代碼會(huì)立即打印,不會(huì)被sleep阻塞');
在這個(gè)例子中,sleep函數(shù)返回一個(gè)Promise,這個(gè)Promise在指定的毫秒數(shù)后解析,從而允許使用await關(guān)鍵字在異步函數(shù)中“等待”,而不會(huì)阻塞其他代碼的執(zhí)行。
console.log('這句代碼會(huì)立即打印,不會(huì)被sleep阻塞')會(huì)立即執(zhí)行,不受sleep影響,體現(xiàn)了非阻塞特性。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
nodejs動(dòng)態(tài)創(chuàng)建二維碼的方法
這篇文章主要為大家詳細(xì)介紹了nodejs動(dòng)態(tài)創(chuàng)建二維碼的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Node.js實(shí)現(xiàn)批量下載圖片簡單操作示例
這篇文章主要介紹了Node.js實(shí)現(xiàn)批量下載圖片簡單操作,結(jié)合實(shí)例形式分析了node.js批量下載圖片的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-01-01npm安裝sharp出現(xiàn)的問題詳解(安裝失敗的問題及解決)
這篇文章主要給大家介紹了關(guān)于npm安裝sharp出現(xiàn)的問題(安裝失敗的問題及解決)的相關(guān)資料,sharp包是基于node.js的高性能圖片處理器,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11node.js利用socket.io實(shí)現(xiàn)多人在線匹配聯(lián)機(jī)五子棋
這篇文章主要介紹了node.js利用socket.io實(shí)現(xiàn)多人在線匹配聯(lián)機(jī)五子棋的操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05