MST

星途 面试题库

面试题:JavaScript异步编程中Promise.allSettled的应用场景

假设你有一个任务数组,每个任务都是一个返回Promise的函数。这些任务相互独立,你需要获取每个任务的最终结果(无论成功或失败),请使用Promise.allSettled来实现,并解释为什么这种场景适合使用它。
38.3万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
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

  1. 任务独立性:每个任务相互独立,Promise.allSettled可以并行执行这些任务,不会因为某个任务失败而影响其他任务的执行。
  2. 获取所有结果:它会等待所有任务都完成(无论是成功还是失败),并返回一个数组,数组中的每个元素对应每个任务的结果,通过status字段可以判断任务是fulfilled(成功)还是rejected(失败),进而获取value(成功结果)或reason(失败原因),满足获取每个任务最终结果的需求。而Promise.all只要有一个任务失败就会立即失败,无法获取到所有任务的执行结果。