js多个await语句并行的调用方法

816 阅读1分钟

js多个await语句并行的调用方法

//模拟异步  
async function waitfor(timeout) {  
  let sleep = await new Promise((resolve) => {  
    setTimeout(() => {  
      console.log(timeout, "ms时间到");  
      resolve();  
    }, timeout);  
  });  
}  
  
//模拟获取接口  
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());  
})();

(async function () {  
  console.log("开始执行:", new Date());  
  //使用promise all来调用  
  var [res1, res] = await Promise.allSettled([waitfor(2000), fetchName()]);  
  //res1 和 res2 分别是两个函数的调用结果  
  console.log("结束执行:", new Date());  
})();