返回
Promise.all 处理多次 reject/最多 n 次 reject
前端
2023-11-23 01:53:50
Promise.all 的基本用法
Promise.all() 函数接收一个包含多个 Promise 的数组作为参数。当所有 Promise 都完成或其中一个 Promise 失败时,Promise.all() 函数将返回一个 Promise。如果所有 Promise 都成功完成,则 Promise.all() 返回一个包含所有 Promise 结果的数组。如果其中一个 Promise 失败,则 Promise.all() 返回一个错误。
const promise1 = Promise.resolve(1);
const promise2 = Promise.reject(new Error('Error'));
const promise3 = Promise.resolve(3);
Promise.all([promise1, promise2, promise3])
.then(results => {
console.log(results); // [1, Error, 3]
})
.catch(error => {
console.log(error); // Error: Error
});
在上面的示例中,promise2 被 reject 了,因此 Promise.all() 返回了一个错误。
如何在 Promise.all 中处理多次 reject
有时,我们需要在 Promise.all() 中处理多次 reject。我们可以使用以下方法:
- 使用 try...catch 块:
try {
const results = await Promise.all([promise1, promise2, promise3]);
console.log(results); // [1, Error, 3]
} catch (error) {
console.log(error); // Error: Error
}
- 使用 Promise.allSettled():
Promise.allSettled([promise1, promise2, promise3])
.then(results => {
results.forEach(result => {
if (result.status === 'fulfilled') {
console.log(result.value); // 1, 3
} else if (result.status === 'rejected') {
console.log(result.reason); // Error
}
});
});
使用 Promise.allSettled() 可以分别处理每个 Promise 的结果,无论它是成功完成还是失败。
如何仅处理最多 n 次 reject
有时,我们只需要处理最多 n 次 reject。我们可以使用以下方法:
- 使用 Promise.any():
Promise.any([promise1, promise2, promise3])
.then(result => {
console.log(result); // 1
})
.catch(error => {
console.log(error); // Error
});
Promise.any() 函数返回第一个完成的 Promise 的结果,无论它是成功完成还是失败。如果所有 Promise 都失败,则 Promise.any() 返回一个错误。
- 使用自定义代码:
let rejectCount = 0;
const maxRejectCount = 2;
const promise1 = Promise.resolve(1);
const promise2 = Promise.reject(new Error('Error 1'));
const promise3 = Promise.reject(new Error('Error 2'));
Promise.all([promise1, promise2, promise3])
.then(results => {
console.log(results); // [1, Error, Error]
})
.catch(error => {
rejectCount++;
if (rejectCount <= maxRejectCount) {
// 处理错误
} else {
// 抛出错误
throw error;
}
});
在上面的示例中,我们使用了一个自定义的计数器来跟踪 reject 的次数。当 reject 的次数超过 maxRejectCount 时,我们将抛出错误。
结论
Promise.all() 是一个非常有用的 JavaScript 函数,可以用于处理多个异步请求。在本文中,我们探讨了如何在 Promise.all() 中处理多次 reject,以及如何仅处理最多 n 次 reject。希望这些知识对您有所帮助。