看代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | //模拟异步 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()); })(); |