最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript sleep睡眠函數(shù)的使用

 更新時(shí)間:2021年07月08日 15:34:25   作者:進(jìn)擊的大羊  
JavaScript是單線程運(yùn)行的,沒有內(nèi)置的sleep函數(shù),那么JavaScript sleep睡眠函數(shù)是怎樣實(shí)現(xiàn)的,感興趣的小伙伴們可以參考一下

1.sleep函數(shù)

JavaScript是單線程運(yùn)行的,沒有內(nèi)置的sleep函數(shù),現(xiàn)在模擬實(shí)現(xiàn)sleep延遲執(zhí)行的效果。

使用睡眠函數(shù)實(shí)現(xiàn)紅綠燈代碼,紅燈2秒,黃燈1秒,綠燈3秒,循環(huán)改變顏色。

2. setTimeout

直接使用setTimeout實(shí)現(xiàn)sleep()的方法,兼容性最好,但是使用了回調(diào)函數(shù)的實(shí)現(xiàn)方式,代碼的可讀性和維護(hù)性不是很好。

// setTimeout
let fun = () => console.log('time out');
let sleep = function(fun,time){
  setTimeout(()=>{
    fun();
  },time);
}

sleep(fun,2000);

setTimeout
setTimeout是最基本的實(shí)現(xiàn)方式,代碼如下,使用遞歸來實(shí)現(xiàn)循環(huán)改變顏色:
function changeColor(color) {
 console.log('traffic-light ', color);
}
function main() {
 changeColor('red');
 setTimeout(()=>{
  changeColor('yellow');
  setTimeout(() => {
   changeColor('green');
   setTimeout(main, 2000);
  }, 1000);
 }, 2000);
}
main();

3.Promise

在ES6的語法中,Promise是sleep方法異步的實(shí)現(xiàn)一種方式,借助Promise方法可以優(yōu)雅的構(gòu)建sleep實(shí)現(xiàn)方法,避免了使用函數(shù)回調(diào)的使用方式。

// promise
let fun = () => console.log('time out');
let sleep2= (time)=> new Promise((resolve)=>{
  setTimeout(resolve,time)
})
sleep2(2000).then(fun);

Promise

使用Promise,把下一次的顏色改變寫在then里面,最后同樣使用遞歸完成循環(huán)。

使用promise代替setTimeout,利用鏈?zhǔn)秸{(diào)用以及then來實(shí)現(xiàn)燈的轉(zhuǎn)換,then返回一個(gè)promise對(duì)象,當(dāng)這個(gè)對(duì)象為resolve狀態(tài)then可以持續(xù)調(diào)用。

const traffic_light=(color,duration)=>{
  return new Promise((resolve,reject)=>{
    console.log('traffic-light ', color);
    setTimeout(()=>{
        resolve()
    },duration)
  })
}
const main=()=>{
    Promise.resolve()
    .then(()=>{
        return traffic_light('red',3000)
    })
    .then(()=>{
        return traffic_light('yellow',1000)
    })
    .then(()=>{
        return traffic_light('green',2000)
    })
    .then(()=>{
        main();
    })
}
main()

4. async await

async await實(shí)際上是generator和promise的語法糖,在提供同步編程方式實(shí)現(xiàn)異步調(diào)用的基礎(chǔ)上,同時(shí)滿足對(duì)sleep函數(shù)語義化的支持,也是常用的sleep的實(shí)現(xiàn)方式。

// async await
async function wait(time){
  await sleep2(time);
  fun();
}

wait(3000);

async await 使用

使用async await就可以避免Promise的一連串.then.then.then,也不再需要遞歸,使用while(true)就可以實(shí)現(xiàn)循環(huán)。

function sleep(duration) {
  return new Promise(resolve => {
      setTimeout(resolve, duration);
  })
}
async function changeColor(color, duration) {
 console.log('traffic-light ', color);
 await sleep(duration);
}
async function main() {
 while (true) {
  await changeColor('red', 2000);
  await changeColor('yellow', 1000);
  await changeColor('green', 3000);
 }
}
main();

5. 1s后輸出1 2s后輸出2 3s后輸出3

const log = console.log;
const sleep = (timeout) => {
  return new Promise((resolve)=>{
    setTimeout(()=>{
      resolve();
    }, timeout)
  })
}

const main = async()=>{
  await sleep(1000);
  log(1);
  await sleep(2000);
  log(2);
  await sleep(3000);
  log(3);
}

參考文章:

紅綠燈
紅綠燈

到此這篇關(guān)于JavaScript sleep睡眠函數(shù)的使用的文章就介紹到這了,更多相關(guān)JavaScript sleep睡眠函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • js canvas實(shí)現(xiàn)圓角圖片

    js canvas實(shí)現(xiàn)圓角圖片

    這篇文章主要為大家詳細(xì)介紹了js canvas實(shí)現(xiàn)圓角圖片效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • javascript寫一個(gè)ajax自動(dòng)攔截并下載數(shù)據(jù)代碼實(shí)例

    javascript寫一個(gè)ajax自動(dòng)攔截并下載數(shù)據(jù)代碼實(shí)例

    這篇文章主要介紹了javascript寫一個(gè)ajax自動(dòng)攔截并下載數(shù)據(jù)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • js進(jìn)階語法之變量提升、函數(shù)提升以及參數(shù)的命名沖突問題解決

    js進(jìn)階語法之變量提升、函數(shù)提升以及參數(shù)的命名沖突問題解決

    JavaScript代碼在執(zhí)行前會(huì)經(jīng)歷一個(gè)預(yù)處理階段,這個(gè)階段主要涉及變量提升和函數(shù)提升,下面這篇文章主要介紹了js進(jìn)階語法之變量提升、函數(shù)提升以及參數(shù)的命名沖突問題解決的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • 微信jssdk踩坑之簽名錯(cuò)誤invalid signature

    微信jssdk踩坑之簽名錯(cuò)誤invalid signature

    這篇文章主要介紹了微信jssdk踩坑之簽名錯(cuò)誤invalid signature,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • js中map()函數(shù)的使用案例詳解

    js中map()函數(shù)的使用案例詳解

    map()方法定義在JavaScript的Array中,它返回一個(gè)新的數(shù)組,數(shù)組中的元素為原始數(shù)組調(diào)用函數(shù)處理后的值,這篇文章主要介紹了js中map()函數(shù)的使用,需要的朋友可以參考下
    2022-11-11
  • 前端導(dǎo)出word文件的多種方式以及導(dǎo)出excel文件

    前端導(dǎo)出word文件的多種方式以及導(dǎo)出excel文件

    導(dǎo)出功能是項(xiàng)目開發(fā)中經(jīng)常會(huì)遇到的需求,在此就前端方面需要做的部分做一個(gè)總結(jié),這篇文章主要給大家介紹了關(guān)于前端導(dǎo)出word文件的多種方式以及導(dǎo)出excel文件的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • JS消息彈框alert、confirm、prompt的實(shí)現(xiàn)代碼

    JS消息彈框alert、confirm、prompt的實(shí)現(xiàn)代碼

    這篇文章主要介紹了JS消息彈框alert、confirm、prompt,文中還給大家介紹了js的三大基礎(chǔ)彈框,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • chrome不支持form.submit的解決方案

    chrome不支持form.submit的解決方案

    最近在解決項(xiàng)目中網(wǎng)站瀏覽器兼容性問題,發(fā)現(xiàn)chrome竟然不支持form.submit,經(jīng)網(wǎng)上搜尋,終于找到了解決方案,有需要的小伙伴參考下。
    2015-04-04
  • JS實(shí)現(xiàn)數(shù)組隨機(jī)排序的三種方法詳解

    JS實(shí)現(xiàn)數(shù)組隨機(jī)排序的三種方法詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript中實(shí)現(xiàn)數(shù)組隨機(jī)排序的三種方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定參考價(jià)值,需要的可以參考一下
    2022-05-05
  • JavaScript?中?this?關(guān)鍵字的作用及改變其上下文的方法

    JavaScript?中?this?關(guān)鍵字的作用及改變其上下文的方法

    這篇文章主要介紹了JavaScript?中?this?關(guān)鍵字的作用和如何改變其上下文,通過使用?call,?apply,?bind?方法,可以改變函數(shù)中的?this?指向,從而在不同的上下文中使用同一個(gè)函數(shù),需要的朋友可以參考下
    2023-01-01

最新評(píng)論

桂林市| 额济纳旗| 梅河口市| 江油市| 平南县| 龙游县| 原阳县| 大连市| 贡山| 武穴市| 石台县| 佳木斯市| 梓潼县| 亳州市| 石家庄市| 墨竹工卡县| 桐乡市| 新余市| 阿拉善盟| 云霄县| 安多县| 吉木萨尔县| 恩施市| 灌南县| 曲周县| 邹平县| 滕州市| 布拖县| 海城市| 乐安县| 柞水县| 苏尼特右旗| 浏阳市| 比如县| 天气| 牟定县| 枣阳市| 寿阳县| 温宿县| 福鼎市| 新化县|