js多個await語句並行調用方法

看代碼

//模擬異步
async function waitfor(timeout) {
  let sleep = new Promise((resolve) => {
    setTimeout(() => {
      console.log(timeout, "ms時間到");
      resolve();
    }, timeout);
  });

  await sleep; //注意不要加(),因爲 new Promise已經是一個函數了
}

//模擬獲取接口
function fetchName(err) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log("數據請求結束");
      resolve("lujs");
    }, 3000);
  });
}

//串行執行,類似與同步調用 5秒纔會運行完成
// (async function () {
//   console.log("開始執行:", new Date());
//   await waitfor(2000);
//   await fetchName();
//   console.log("結束執行:", new Date());
// })();

//並行執行的第一種方法 3秒就能運行完成
// (async function () {
//   console.log("開始執行:", new Date());
//   //特殊語法
//   //先生成promis,然後在調用,就會並行執行await以後的語句
//   let waitforFun = waitfor(2000);
//   let fetchNameFun = fetchName();
//   await waitforFun;
//   await fetchNameFun;
//   console.log("結束執行:", new Date());
// })();

//並行執行的第二種方法 3秒就能運行完成
(async function () {
  console.log("開始執行:", new Date());
  //使用promise all來調用
  var [res1, res] = await Promise.all([waitfor(2000), fetchName()]);
  //res1 和 res2 分別是兩個函數的調用結果
  console.log("結束執行:", new Date());
})();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章