首页 > 解决方案 > 如何按已解决的顺序对承诺进行排序而不关心参数中的顺序

问题描述

let P1 = new Promise((res, rej) => {
    setTimeout(res("R1"), 2000);
});
let P2 = new Promise((res, rej) => {
    setTimeout(res("R2"), 5000);
});
let P3 = new Promise((res, rej) => {
    setTimeout(res("R3"), 1000);
});

我希望我的函数按如下顺序返回承诺:[“R3”,“R1”,“R2”]

function preserveOrder([P1, P2, P3]); // should return ["R3, "R1", "R2"]
function preserveOrder([P2, P3, P1]); // should return ["R3, "R1", "R2"]

我想不出最好的方法是什么?(因为 Promise.all() 会保留订单)

标签: javascriptpromisees6-promise

解决方案


您可能正在寻找

async function fulfillmentOrder(promises) {
    const results = [];
    await Promise.all(promises.map(promise =>
        promise.then(value => {
            results.push(value);
        })
    ));
    return results;
}

推荐阅读