实现Promise.all
时间: 2024-04-27 18:17:05 浏览: 146
js代码-promise.all的实现
以下是实现Promise.all的示例代码:
```javascript
function myPromiseAll(promises) {
return new Promise((resolve, reject) => {
let results = [];
let count = 0;
promises.forEach((promise, index) => {
promise.then(res => {
results[index] = res;
count++;
if (count === promises.length) {
resolve(results);
}
}).catch(err => {
reject(err);
});
});
});
}
```
这段代码实现了一个名为myPromiseAll的函数,它接收一个包含多个Promise对象的数组作为参数。该函数会返回一个新的Promise对象,该Promise对象会在所有传入的Promise对象都成功解析后才会被解析,如果有任何一个Promise对象被拒绝,则返回的Promise对象会被拒绝。
在函数内部,我们使用了一个results数组来保存每个Promise对象的解析结果,使用count变量来记录已经解析的Promise对象的数量。通过遍历传入的Promise对象数组,我们对每个Promise对象调用then方法来处理其解析结果。当所有的Promise对象都解析完成时,我们使用resolve方法将results数组作为参数解析出去。如果有任何一个Promise对象被拒绝,我们则使用reject方法将错误信息传递出去。
使用示例:
```javascript
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 1 resolved');
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 2 resolved');
}, 2000);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 3 resolved');
}, 3000);
});
myPromiseAll([promise1, promise2, promise3])
.then(results => {
console.log(results);
})
.catch(err => {
console.error(err);
});
```
这段代码创建了三个Promise对象,并将它们作为参数传递给myPromiseAll函数。当所有的Promise对象都成功解析后,结果数组会被打印出来。如果有任何一个Promise对象被拒绝,错误信息会被打印出来。
阅读全文