- 实现思路:
- 使用
Promise.allSettled
方法,它会等待所有Promise都完成(无论是成功还是失败),返回一个新的Promise,这个新Promise的结果是一个数组,数组中的每个元素对应原始Promise数组中每个Promise的结果,每个元素是一个对象,对象中有status
(值为"fulfilled"
或"rejected"
)和value
(成功时的值)或reason
(失败时的原因)属性。
- 遍历
Promise.allSettled
返回的结果数组,区分成功和失败的任务,将成功的结果和失败的错误信息分别收集起来,最终进行整合处理。
- 代码示例:
// 模拟多个异步API请求
function apiCall1() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('API 1 Success');
}, 1000);
});
}
function apiCall2() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('API 2 Error'));
}, 1500);
});
}
function apiCall3() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('API 3 Success');
}, 2000);
});
}
Promise.allSettled([apiCall1(), apiCall2(), apiCall3()])
.then(results => {
let successResults = [];
let errorResults = [];
results.forEach((result, index) => {
if (result.status === 'fulfilled') {
successResults.push(result.value);
} else {
errorResults.push(result.reason);
}
});
// 整合处理
console.log('成功的结果:', successResults);
console.log('失败的错误信息:', errorResults);
});