Promise实例的any方法

Promise.any()方法,该方法接受一组Promise实例作为参数,包装成一个新的Promise实例返回,只要参数实例有一个变成fulfilled状态,包装实例就会变成fulfilled状态。如果所有参数实例都会变成rejected状态,包装实例就会变成rejected状态。

Promise.any( )跟Promise.race( )方法很像,只有一点不同,就是不会因为某个Promise变成rejected状态而结束。

 

 

复制代码
const promises = [
  fetch('/endpoint-a').then(() => 'a'),
  fetch('/endpoint-b').then(() => 'b'),
  fetch('/endpoint-c').then(() => 'c'),
];

try {
  const first = await Promise.any(promises);
  console.log(first);
} catch (error) {
  console.log(error);
}
复制代码

     上边代码中,Promise.any( )方法的参数数组包含三个Promise操作,其中只要有一个变成fulfilled,Promise.any( )返回的Promise对象就变成fulfilled.如果所有三个操作都变成rejected,那么await命令就会抛出错误。

     Promise.any( )抛出的错误,不是一个一般的错误,而是一个AggregateError 实例。它相当于一个数组,每个成员对应一个被rejected的操作所抛出的错我。

 

下面是个AggregateError的实现示例

new AggregateError() extends Array -> AggregateError

const err = new AggregateError();
err.push(new Error("first error"));
err.push(new Error("second error"));
throw err;

 

 捕捉错误

复制代码
var resolved = Promise.resolve(42);
var rejected = Promise.reject(-1);
var alsoRejected = Promise.reject(Infinity);

Promise.any([resolved, rejected, alsoRejected]).then(function (result) {
  console.log(result); // 42
});

Promise.any([rejected, alsoRejected]).catch(function (results) {
  console.log(results); // [-1, Infinity]
});
复制代码

 

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

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

导航

统计

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