如果 Promise.all 中有一个 Promise 对象失败,那么整个 Promise.all 就会失败。如果需要让 Promise.all 在某个 Promise 对象失败的情况下仍然可以成功运行,可以使用 Promise.allSettled 方法。 Promise.allSettled 方法会等待所有 Promise 对象完成,无论是成功还是失败,它都会返回一个数组,包含了每个 Promise 对象的结果。如果 Promise 对象成功,那么结果会是 { status: 'fulfilled', value: 成功的结果 },如果 Promise 对象失败,那么结果会是 { status: 'rejected', reason: 失败的原因 }。 下面是一个使用 Promise.allSettled 方法的示例代码:
javascriptCopy code
function wait(time) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
if (time < 1500) {
reject('等待时间太短');
} else {
resolve('等待了 ' + time + ' 毫秒');
}
}, time);
});
}
async function test() {
try {
let results = await Promise.allSettled([wait(2000), wait(1000), wait(1500)]);
results.forEach(result => {
if (result.status === 'fulfilled') {
console.log(result.value); // 输出成功的结果
} else {
console.log(result.reason); // 输出失败的原因
}
});
} catch (error) {
console.log(error);
}
}
test();
在上面的代码中,我们使用 Promise.allSettled 方法等待所有 Promise 对象完成,然后遍历结果数组,根据每个 Promise 对象的状态输出相应的结果。这样即使有 Promise 对象失败,整个 Promise.allSettled 仍然可以成功运行。