怎么从一个已解析的承诺列表中获取最后一个已解析的承诺?

原学程将引见若何从1个已剖析的许诺列表中夺取最初1个已剖析的许诺?的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

怎么从一个已解析的承诺列表中获取最后一个已解析的承诺? 教程 第1张

成绩描写

假定我们有许诺列表[p一,p二]
我想创立1个以[p一,p二]作为参数并前往最初剖析的许诺的函数,即在原例中,前往的许诺将是p二

念头是我要在Promise对于象上完成last()办法。

 const p一 = new Promise((resolve,reject)=>{
 setTimeout(()=>{resolve("P一 resolved in 三 seconds")},三000)
});
 const p二 = new Promise((resolve,reject)=>{
 setTimeout(()=>{resolve("P二 resolved in 五 seconds")},五000)
});

Promise.race([p二,p一]).then(value=>{ console.log(value) // Both promises resolved but P二 is slower
 }) // Expected output : P一 resolved in 三 seconds

 Promise.last([p二,p一]).then(value=>{ console.log(value) // Both promises resolved but P二 is slower
 }) // Expected output : P二 resolved in 五 second.

推举谜底

异常简略:只需应用尺度Promise.all期待一切许诺,并将它们按实现(当实现时)的次序搁进1个数组中,如许便不妨拜访最初1个值:

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个)成果等。假如您确切只须要最初1个成果,则没有须要将它们保存在数组中,而只需保存1个变质,您不妨在每一次许诺剖析时笼罩该变质。

佳了闭于怎样从1个已剖析的许诺列表中夺取最初1个已剖析的许诺?的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。