function executeTasks(tasks) {
return Promise.allSettled(tasks.map(task => task()));
}
// 示例使用
const tasks = [
() => Promise.resolve('Task 1 Success'),
() => Promise.reject('Task 2 Failure')
];
executeTasks(tasks).then(results => {
results.forEach((result, index) => {
if (result.status === 'fulfilled') {
console.log(`Task ${index + 1} 成功:`, result.value);
} else {
console.log(`Task ${index + 1} 失败:`, result.reason);
}
});
});
为什么适合使用Promise.allSettled
- 任务独立性:每个任务相互独立,
Promise.allSettled
可以并行执行这些任务,不会因为某个任务失败而影响其他任务的执行。
- 获取所有结果:它会等待所有任务都完成(无论是成功还是失败),并返回一个数组,数组中的每个元素对应每个任务的结果,通过
status
字段可以判断任务是fulfilled
(成功)还是rejected
(失败),进而获取value
(成功结果)或reason
(失败原因),满足获取每个任务最终结果的需求。而Promise.all
只要有一个任务失败就会立即失败,无法获取到所有任务的执行结果。