Promise实例的race方法

Promise.race( )方法同样是将多个Promise实例,包装成一个新的Promise实例。与Promise.all不同的是,多个Promise实例,只要有一个率先改变,race方法就跟着改变,并返回那个率先改变的Promise实例的返回值,传递给回调函数。

 

const p = Promise.race([p1, p2, p3]);

      上面代码中,只要p1p2p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。

 

Promise.race( )方法的参数与Promise.all( )方法一样,如果不是Promise实例,就会先调用下面讲到的Promise.resolve()方法,将参数转为Promise实例,再进一步处理。

 

下面是一个例子,如果指定时间内没有获得结果,就将Promise的状态变为reject,否则变为resolve

复制代码
const p = Promise.race([
  fetch('/resource-that-may-take-a-while'),
  new Promise(function (resolve, reject) {
    setTimeout(() => reject(new Error('request timeout')), 5000)
  })
]);

p
.then(console.log)
.catch(console.error);
复制代码

     上边代码中,如果5s内fetch方法无返回结果,变量p的状态就会变为rejected,从而触发catch方法指定的回调函数。

 

posted on   zhishiyv  阅读(437)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端

导航

统计

点击右上角即可分享
微信分享提示