function all(promiseArr) {
if (!Array.isArray(promiseArr)) {
throw new Error('promiseArr 必须为数字')
}
if (promiseArr.length === 0) {
Promise.resolve([])
}
var result = []
return new Promise((resolve, reject) => {
for (let i = 0; i < promiseArr.length; i++) {
// promiseArr里面的值可能不是promise方法 所以得转换为promise方法
Promise.resolve(promiseArr[i]).then(res => {
// 这里不用push 是因为不知道哪个promise先执行完 如果用push 就会使primiseArr的结果一一对应不上
result[i] = res
if(result.length === promiseArr.length){
// 怕是异步函数 所以得结果全部出来了才返回
resolve(result)
}
}).catch(err => {
reject(err)
})
}
})
}
Promise.myAll = all
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.myAll([promise1, promise2, promise3]).then((values) => {
console.log(values);
});
Promise.all的实现
最新推荐文章于 2024-02-27 21:56:37 发布