MST

星途 面试题库

面试题:JavaScript 类数组对象并发处理中的错误处理

已知一个包含多个异步任务的类数组对象(每个任务以函数形式存储在对象中),这些任务可能会失败(例如使用 `Promise.reject` 模拟失败)。请编写代码实现并发执行这些任务,同时能够捕获每个任务的错误,并且在所有任务完成(包括失败)后,返回一个包含所有任务结果(成功值或错误信息)的数组。
18.2万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
function runTasksConcurrently(tasks) {
    return Promise.allSettled(tasks.map(task => {
        return task().then(value => ({ status: 'fulfilled', value }))
          .catch(error => ({ status:'rejected', reason: error }));
    }));
}

// 示例用法
const tasks = [
    () => Promise.resolve(1),
    () => Promise.reject(new Error('任务2失败')),
    () => Promise.resolve(3)
];

runTasksConcurrently(tasks).then(results => {
    console.log(results);
});

上述代码实现了以下功能:

  1. runTasksConcurrently 函数接受一个包含多个任务函数的类数组对象 tasks
  2. 使用 map 方法遍历 tasks 数组,对每个任务函数调用并包装为 Promise,使用 Promise.allSettled 并发执行所有任务。
  3. 每个任务成功时,返回 { status: 'fulfilled', value },失败时返回 { status:'rejected', reason: error }
  4. 最终返回一个包含所有任务结果(成功值或错误信息)的数组。