async-await 同时触发(等待)多个异步操作
2018-10-13 本文已影响4人
后除
使用 async-await
等待异步操作完成的时候,如果前后两个异步操作不存在依赖关系,同时触发应该是更好的方案。
因为 await
后面必须跟一个 Promise
实例,于是可以用 Promise.all()
这个方法把多个 Promise
实例合并成一个 Promise
实例。Promise.all()
接收一个部署了 Iterator 的对象(例如:数组、Set),每个成员都必须是 Promise
实例,且只有当每个成员的状态都是 fulfilled 的时候,总实例的状态才是 fulfilled,否则是 rejected。
Promise.all()
用法示例:
const wait = ms => new Promise((resolve, reject) => {
setTimeout(() => {
console.log(`wait ${ms}ms`)
resolve()
}, ms)
})
const PA = Promise.all([wait(3000), wait(1000), wait(2000)])
// 依次打印:wait 1000ms wait 2000ms wait 3000ms
async-await
同时触发多个异步操作示例:
const wait = ms => new Promise((resolve, reject) => {
setTimeout(() => {
console.log(`wait ${ms}ms`)
resolve()
}, ms)
})
;(async () => {
await Promise.all([wait(3000), wait(1000), wait(2000)])
// 依次打印:wait 1000ms wait 2000ms wait 3000ms
})()