91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript sleep睡眠函數的使用方法

發布時間:2021-07-08 18:07:51 來源:億速云 閱讀:1141 作者:chen 欄目:開發技術

這篇文章主要講解了“JavaScript sleep睡眠函數的使用方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JavaScript sleep睡眠函數的使用方法”吧!

目錄
  • 1.sleep函數

  • 2. setTimeout

  • 3.Promise

  • 4. async await

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


1.sleep函數

JavaScript是單線程運行的,沒有內置的sleep函數,現在模擬實現sleep延遲執行的效果。

使用睡眠函數實現紅綠燈代碼,紅燈2秒,黃燈1秒,綠燈3秒,循環改變顏色。

2. setTimeout

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

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

sleep(fun,2000);

setTimeout
setTimeout是最基本的實現方式,代碼如下,使用遞歸來實現循環改變顏色:
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方法異步的實現一種方式,借助Promise方法可以優雅的構建sleep實現方法,避免了使用函數回調的使用方式。

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

Promise

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

使用promise代替setTimeout,利用鏈式調用以及then來實現燈的轉換,then返回一個promise對象,當這個對象為resolve狀態then可以持續調用。

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實際上是generator和promise的語法糖,在提供同步編程方式實現異步調用的基礎上,同時滿足對sleep函數語義化的支持,也是常用的sleep的實現方式。

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

wait(3000);

async await 使用

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

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);
}

感謝各位的閱讀,以上就是“JavaScript sleep睡眠函數的使用方法”的內容了,經過本文的學習后,相信大家對JavaScript sleep睡眠函數的使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

塔河县| 定安县| 洪雅县| 兰溪市| 佳木斯市| 二连浩特市| 文水县| 阜平县| 保亭| 祁阳县| 镇宁| 溧阳市| 广西| 宁国市| 巫山县| 阿拉善左旗| 西乡县| 古田县| 襄樊市| 剑河县| 墨竹工卡县| 池州市| 浦城县| 讷河市| 灵丘县| 建平县| 呼和浩特市| 德惠市| 清水河县| 临猗县| 昌吉市| 梓潼县| 准格尔旗| 洛浦县| 南城县| 肥乡县| 精河县| 靖安县| 托里县| 黎川县| 通海县|