善用Promise.all()
下面这种会打破两个函数的并行,第二个任务会等到第一个任务结束才去执行。
async function hh() { const a = await aa() const b = await bb() }
|
我们可以使用 Promise.all() 包裹:
async function hh() { const promiseA = aa() const promiseB = bb() const [a, b] = await Promise.all([promiseA, promiseB]) }
|
循环中的异步
我们不能在 forEach map 等中去执行异步操作。即使我们在其中使用了 await/async ,它也不会暂停等所有的异步操作都执行完毕。
function hh() { [1, 2, 3].forEach(async item => { await getData() }) }
|
如果我们想要等待异步操作都完成后才返回,则可以使用传统的for循环:
async function hh() { for (let i of [1, 2, 3]) { await getData() } }
|
如果我们还想循环中的所有异步操作都是并发执行,则可以使用
async function hh() { const promises = [ promiseA(), promiseB(), promiseC() ] for await (let i of promises) { } }
|
个人简介:脆弱的种子在温室也会死亡,坚强的种子,在沙漠也能发芽。