[英]Typescript inheritance and promises: how to get resolved promise in the sub class
[英]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.