溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

javascript中sleep的使用方法

發(fā)布時(shí)間:2020-06-19 11:20:28 來(lái)源:億速云 閱讀:189 作者:Leah 欄目:web開發(fā)

這期內(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è)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI