MST

星途 面试题库

面试题:JavaScript 利用 Promise.all 与 Promise.race 实现复杂数据处理

假设有一个数组,数组中的每个元素都是一个返回 Promise 的函数,这些 Promise 分别代表不同的数据获取操作。要求使用 Promise.all 和 Promise.race 实现以下功能:首先并行发起所有数据获取操作,若其中任意一个操作失败,取消其他正在进行的操作,并返回失败原因;若所有操作都成功,将所有操作的结果按顺序组合成一个新数组返回。请编写代码实现。
30.8万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
function executePromises(promiseFuncs) {
    return new Promise((resolve, reject) => {
        const promises = promiseFuncs.map(func => func());
        const racePromise = Promise.race(promises);
        const allPromise = Promise.all(promises);

        racePromise.then(() => {
            allPromise.then(values => {
                resolve(values);
            }).catch(error => {
                reject(error);
            });
        }).catch(error => {
            // 取消其他正在进行的操作(这里无法直接取消,只是为了逻辑完整)
            // 实际场景中可以使用 AbortController 等方式取消 Promise
            reject(error);
        });
    });
}

你可以这样调用这个函数:

// 示例用法
const promiseFuncs = [
    () => Promise.resolve(1),
    () => Promise.resolve(2),
    () => Promise.reject(new Error('操作失败'))
];

executePromises(promiseFuncs).then(result => {
    console.log(result);
}).catch(error => {
    console.error(error);
});