观看Promise相关视频笔记

善用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) { }
}