据我所知,有关于
promise
的两个选项:
> promise.all()
> promise.race()
好的,我知道promise.all()的作用.它并行运行promises,然后.then为两个值提供成功解析的值.这是一个例子:
但是我不明白promise.race()应该做什么呢?换句话说,不使用它有什么区别?假设这个:
看到?我没有使用promise.race(),它的行为类似于promise.race().无论如何,是否有任何简单而干净的例子告诉我何时应该使用promise.race()?
解决方法
如您所见,race()将返回首先解析或拒绝的promise实例:
- var p1 = new Promise(function(resolve,reject) {
- setTimeout(resolve,500,'one');
- });
- var p2 = new Promise(function(resolve,100,'two');
- });
- Promise.race([p1,p2]).then(function(value) {
- console.log(value); // "two"
- // Both resolve,but p2 is faster
- });
对于要使用的场景,您可能希望限制请求的成本时间:
- var p = Promise.race([
- fetch('/resource-that-may-take-a-while'),new Promise(function (resolve,reject) {
- setTimeout(() => reject(new Error('request timeout')),5000)
- })
- ])
- p.then(response => console.log(response))
- p.catch(error => console.log(error))
随着比赛()你只需要得到回报的承诺,你不必关心比赛([])中的哪一个承诺首先归还,
但是,如果没有比赛,就像你的例子一样,你需要关心哪一个首先返回,并在成功回调中调用回调.