如何实现promise.all ,promise.any,promise.any,promise.allSetlled
时间: 2025-07-01 11:54:23 浏览: 4
### 实现 `Promise.all`
`Promise.all` 接收一个 Promise 数组,并在所有 Promise 成功完成后返回一个新的 Promise,其结果是一个数组,包含每个 Promise 的结果。如果有一个 Promise 被拒绝,则立即拒绝。
```javascript
function promiseAll(promises) {
return new Promise((resolve, reject) => {
if (!Array.isArray(promises)) {
return reject(new TypeError('promises must be an array'));
}
const results = [];
let resolvedCount = 0;
for (let i = 0; i < promises.length; i++) {
Promise.resolve(promises[i])
.then(value => {
results[i] = value;
resolvedCount++;
if (resolvedCount === promises.length) {
resolve(results);
}
})
.catch(error => {
reject(error);
});
}
});
}
```
### 实现 `Promise.any`
`Promise.any` 接收一个 Promise 数组,并在任意一个 Promise 成功完成后立即返回该值。如果所有 Promise 都被拒绝,则返回一个聚合错误(AggregateError)。
```javascript
function promiseAny(promises) {
return new Promise((resolve, reject) => {
if (!Array.isArray(promises)) {
return reject(new TypeError('promises must be an array'));
}
const errors = [];
let rejectedCount = 0;
for (let i = 0; i < promises.length; i++) {
Promise.resolve(promises[i])
.then(value => {
resolve(value);
})
.catch(error => {
errors[i] = error;
rejectedCount++;
if (rejectedCount === promises.length) {
reject(new AggregateError(errors, 'All promises were rejected'));
}
});
}
});
}
```
### 实现 `Promise.allSettled`
`Promise.allSettled` 接收一个 Promise 数组,并在所有 Promise 完成后(无论是成功还是失败)返回一个结果数组,每个元素表示对应 Promise 的状态和结果或原因。
```javascript
function promiseAllSettled(promises) {
return new Promise((resolve, reject) => {
if (!Array.isArray(promises)) {
return reject(new TypeError('promises must be an array'));
}
const results = [];
let settledCount = 0;
for (let i = 0; i < promises.length; i++) {
Promise.resolve(promises[i])
.then(value => {
results[i] = { status: 'fulfilled', value };
settledCount++;
if (settledCount === promises.length) {
resolve(results);
}
})
.catch(reason => {
results[i] = { status: 'rejected', reason };
settledCount++;
if (settledCount === promises.length) {
resolve(results);
}
});
}
});
}
```
### 使用示例
#### 示例:`promiseAll`
```javascript
const p1 = Promise.resolve(3);
const p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
const p3 = Promise.reject('出错了');
promiseAll([p1, p2, p3])
.then(values => console.log(values))
.catch(error => console.error(error));
```
#### 示例:`promiseAny`
```javascript
const p1 = Promise.reject('出错了1');
const p2 = new Promise((resolve, reject) => {
setTimeout(reject, 100, '出错了2');
});
const p3 = Promise.resolve(3);
promiseAny([p1, p2, p3])
.then(value => console.log(value))
.catch(error => console.error(error));
```
#### 示例:`promiseAllSettled`
```javascript
const p1 = Promise.resolve(3);
const p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
const p3 = Promise.reject('出错了');
promiseAllSettled([p1, p2, p3])
.then(results => console.log(results))
.catch(error => console.error(error));
```
---
阅读全文
相关推荐


















