js 手写promise.all
时间: 2023-09-13 13:04:58 浏览: 55
当你使用JavaScript时,可以手动实现Promise.all函数,下面是一个示例代码:
```javascript
function promiseAll(promises) {
return new Promise((resolve, reject) => {
let results = [];
let count = 0;
for (let i = 0; i < promises.length; i++) {
promises[i]
.then((result) => {
results[i] = result;
count++;
if (count === promises.length) {
resolve(results);
}
})
.catch((error) => {
reject(error);
});
}
if (promises.length === 0) {
resolve(results);
}
});
}
```
这个函数接受一个Promise数组作为参数,并返回一个新的Promise对象。它会等待所有的Promise都变为resolved状态后,才会将结果作为一个数组传递给resolve函数。如果其中任何一个Promise被rejected,则整个Promise.all也会被rejected。
你可以像下面这样使用它:
```javascript
const promise1 = Promise.resolve(1);
const promise2 = new Promise((resolve) => setTimeout(resolve, 100, 'Hello'));
const promise3 = new Promise((resolve, reject) => setTimeout(reject, 200, 'Oops!'));
promiseAll([promise1, promise2, promise3])
.then((results) => {
console.log(results); // [1, 'Hello']
})
.catch((error) => {
console.error(error); // 'Oops!'
});
```
在这个例子中,promise1立即被解决,promise2在100毫秒后被解决,而promise3在200毫秒后被拒绝。最终,Promise.all将返回一个包含promise1和promise2的结果的数组,并通过catch捕获promise3的拒绝原因。