使用场景
一组列表list中根据id获取后端数据
async
let arr =[]
try{
this.list.forEach(item => {
arr.push(this.getObjectById(item))
})
const res = await Promise.all(arr)
// 到此:所有请求都已完成,你可以直接返回或处理 res
return res
}catch(err){}
这里自己实现下promise的原理
promises:传入的是一组需要执行的Promise,
Promise.all = function (promises) {
let arr = [],
//计数器
count = 0
//返回一个promise
return new Promise((resolve, reject) => {
//需要执行的promises数组循环
promises.forEach((item, i) => {
//Promise.resolve 是降item转为promise(就是用来兼容玩意传入的不是promise)。
//这里其实就是执行了传入数组中的promise
Promise.resolve(item).then(res => {
//存储结果
arr[i] = res
//记录promise 完成的数量
count += 1
判断完成的数量和 实际的promise数组的长度。相等就返回arr结果
if (count === promises.length) resolve(arr)
}).catch(err){
//只要有一个promise失败就返回
reject(err)
}
})
})
}
|