2 回答

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的代碼是異步的。您可以自己輕松檢查。
const mockAsyncFn = () =>
new Promise(resolve => setTimeout(() => resolve(), 2000));
const someAsync = async () => {
const from = new Date();
await Promise.all(
[mockAsyncFn, mockAsyncFn].map(async fn => await fn())
);
const to = new Date();
return to - from;
};
(async () => console.log(await someAsync()))();
結(jié)果將是 ~2s 但不是 4。

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
async
是返回承諾的函數(shù)的語(yǔ)法糖。
考慮這個(gè)簡(jiǎn)單的例子:
async?function?ret42()?{ ???return?42; }
這相當(dāng)于:
function?ret42()?{ ???return?Promise.resolve(42); }
從這個(gè)角度來(lái)看,回調(diào)中的異步函數(shù)是同步的,直到遇到一個(gè)await
(這是語(yǔ)法糖.then(() =>
)。
如果您希望每個(gè)函數(shù)都執(zhí)行完才能執(zhí)行下一個(gè)函數(shù),則必須使用for await
, 或者只是:
for?(const?fn?of?sizes)?{ ?await?fn(); }
添加回答
舉報(bào)