Promise.race()的实现

时间:2018-05-24 14:17:54

标签: javascript asynchronous promise

我在JavaScript中遇到Promise.race()方法的an implementation,它按预期工作,但对我来说没有多大意义。

const race = (...promises) =>
    new Promise((res, rej) => {
        promises.forEach(p => p.then(res).catch(rej));
});

forEach循环如何最终分配特定承诺的功能?

2 个答案:

答案 0 :(得分:0)

根据定义,无论您多久拨打resolvereject,承诺都会解决/拒绝一次。因此,你所构建的承诺将解决所通过的承诺的第一个承诺。

答案 1 :(得分:0)

我想您可以举一个更简单的示例,为变量分配一些新名称,这样更容易掌握。

const race = ([A, B, C]) =>
    const outer = new Promise((resolveRace, rejectRace) => {
        A.then(resolveRace).catch(rejectRace);
        B.then(resolveRace).catch(rejectRace);
        C.then(resolveRace).catch(rejectRace);
    }
    return outer;
});

对于每个“内部”承诺,我们使用“外部” Promise resolveRacerejectRace函数分配成功/错误回调。