答案
- for await...of 用于遍历多个Promise
- 是Promise.all的代替品,只不过Promise.all是api形式并在then中获取数组结果,而for await of是循环形式,能快速在列表中把结果取出来
代码示例
function createPromise(val) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(val)
}, 1000)
})
}
(async function () {
const p1 = createPromise(100)
const p2 = createPromise(200)
const p3 = createPromise(300)
const res1 = await p1
console.log(res1)
const res2 = await p2
console.log(res2)
const res3 = await p3
console.log(res3)
})()
(async function () {
const p1 = createPromise(100)
const p2 = createPromise(200)
const p3 = createPromise(300)
const list = [p1, p2, p3]
Promise.all(list).then((res) => {
console.log(res)
})
})()
(async function () {
const p1 = createPromise(100)
const p2 = createPromise(200)
const p3 = createPromise(300)
const list = [p1, p2, p3]
const list = [p1, p2, p3]
for await (let res of list) {
console.log(res)
}
})()
- 扩展: 如何实现顺序出现res1 res2 res3?
const res1 = await createPromise(100)
console.log(res1)
const res2 = await createPromise(200)
console.log(res2)
const res3 = await createPromise(300)
console.log(res3)
const arr = [10,20,30]
for(let num of arr){
const res = await createPromise(num)
console.log(res);
}