看代碼
//模擬異步
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());
})();