簡體   English   中英

如何從 Javascript 中已解決的承諾列表中獲取最后解決的 promise?

[英]How to get last resolved promise from a list of resolved promises in Javascript?

假設,我們有一個承諾列表[p1,p2] I want to create a function which takes [p1,p2] as arguments and return the last resolved promise ie in this case, the returned promise would be p2 .

動機是我想在 Promise object 上實現 last() 方法。

 const p1 = new Promise((resolve,reject)=>{
                setTimeout(()=>{resolve("P1 resolved in 3 seconds")},3000)
            });
 const p2 = new Promise((resolve,reject)=>{
                setTimeout(()=>{resolve("P2 resolved in 5 seconds")},5000)
            });

Promise.race([p2,p1]).then(value=>{ console.log(value) // Both promises resolved but P2 is slower
    }) // Expected output : P1 resolved in 3 seconds

 Promise.last([p2,p1]).then(value=>{ console.log(value) // Both promises resolved but P2 is slower
    }) // Expected output : P2 resolved in 5 second.

非常簡單:只需等待所有使用標准Promise.all的承諾,然后按照它們履行的順序(當它們履行時)將它們放入一個數組中,以便您可以訪問最后一個值:

async function lastResult(promises) {
    if (!promises.length) throw new RangeError("No last result from no promises");
    const results = [];
    await Promise.all(promises.map(p =>
        p.then(v => {
            results.push(v);
        })
    ));
    return results[results.length-1];
}

您可以調整它以按照您想要的方式處理拒絕,返回任何其他(例如第一個)結果等。如果您真的只需要最后一個結果,您不需要將它們存儲在數組中,而可以簡單地保留一個每次 promise 解析時覆蓋的單個變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM