您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)javascript中sleep的使用方法,以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
很多編程語(yǔ)言里都有sleep()
,delay()
等方法,它能讓我們的程序不那么著急的去執(zhí)行下一步操作,而是延遲、等待一段時(shí)間。軟件開發(fā)中經(jīng)常會(huì)遇到需要這樣的函數(shù),比如等待幾分鐘去檢查某一事件是否發(fā)生。JavaScript里有setTimeout()
方法來(lái)實(shí)現(xiàn)設(shè)定一段時(shí)間后執(zhí)行某個(gè)任務(wù),但寫法很丑陋,需要提供回調(diào)函數(shù):
setTimeout(function(){ alert("Hello"); }, 3000);
JavaScript Promise API是新出現(xiàn)了一個(gè)API,借助 Promise,我們可以對(duì)setTimeout
函數(shù)進(jìn)行改良,下面就是把setTimeout()
封裝成一個(gè)返回Promise的sleep()
函數(shù)。
// https://zeit.co/blog/async-and-await function sleep (time) { return new Promise((resolve) => setTimeout(resolve, time)); } // 用法 sleep(500).then(() => { // 這里寫sleep之后需要去做的事情 })
你會(huì)發(fā)現(xiàn),這種寫法很優(yōu)雅,很像其它編程語(yǔ)言里的延遲、等待函數(shù)。Promise API使我們避免傳入回調(diào)函數(shù),我們?cè)趯?shí)現(xiàn)中還使用了ES6中的箭頭(arrow)函數(shù)。
這里需要提到的一個(gè)問(wèn)題是,這個(gè)sleep()
在執(zhí)行的時(shí)候是“block”程序的繼續(xù)執(zhí)行的。它不是同步的。如果想讓它同步執(zhí)行,不妨礙執(zhí)行之后的代碼,我們可以使用 async/await
關(guān)鍵字。
(async function() { console.log('Do some thing, ' + new Date()); await sleep(3000); console.log('Do other things, ' + new Date()); })();
執(zhí)行結(jié)果:
Do some thing, Mon Feb 23 2015 21:52:11 GMT+0800 (CST) Do other things, Mon Feb 23 2015 21:52:14 GMT+0800 (CST)
你會(huì)發(fā)現(xiàn),這一次,sleep()
并沒(méi)有阻礙第二個(gè)console
的執(zhí)行。
但 async/await
是ES7中的語(yǔ)法,目前還是處于試驗(yàn)階段。那現(xiàn)在想用這個(gè) async/await
特性怎么辦?可以嘗試 google 的一個(gè) JavaScript 預(yù)編譯器 traceur,可以將高版本的 JavaScript 編譯為 ES5 代碼,已經(jīng)實(shí)驗(yàn)性的支持了 async/await (需要使用 –experimental 來(lái)指定開啟)。
上文描述的就是javascript中sleep的使用方法,具體使用情況還需要大家自己動(dòng)手實(shí)驗(yàn)使用過(guò)才能領(lǐng)會(huì)。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。