javascript – 了解promise.race()用法

前端之家收集整理的这篇文章主要介绍了javascript – 了解promise.race()用法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
据我所知,有关于 promise的两个选项:

> promise.all()
> promise.race()

好的,我知道promise.all()的作用.它并行运行promises,然后.then为两个值提供成功解析的值.这是一个例子:

Promise.all([
  $.ajax({ url: 'test1.PHP' }),$.ajax({ url: 'test2.PHP' })
])
.then(([res1,res2]) => {
  // Both requests resolved
})
.catch(error => {
  // Something went wrong
});

但是我不明白promise.race()应该做什么呢?换句话说,不使用它有什么区别?假设这个:

$.ajax({
    url: 'test1.PHP',async: true,success: function (data) {
        // This request resolved
    }
});

$.ajax({
    url: 'test2.PHP',success: function (data) {
        // This request resolved
    }
});

看到?我没有使用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))

随着比赛()你只需要得到回报的承诺,你不必关心比赛([])中的哪一个承诺首先归还,

但是,如果没有比赛,就像你的例子一样,你需要关心哪一个首先返回,并在成功回调中调用回调.

猜你在找的JavaScript相关文章