Typescript Promise.any 函数的用法详解

举报
林欣 发表于 2024/11/15 11:34:08 2024/11/15
【摘要】 Promise.any 函数的用法详解及使用场景说明 用法详解Promise.any 是 JavaScript ES2021 (ES12) 中引入的一个静态方法,它用于处理多个 Promise,并返回第一个成功解决(fulfilled)的 Promise 的结果。语法:Promise.any(iterable)iterable:一个可迭代对象(如数组),其中包含多个 Promise。返回值...

Promise.any 函数的用法详解及使用场景说明

用法详解

Promise.any 是 JavaScript ES2021 (ES12) 中引入的一个静态方法,它用于处理多个 Promise,并返回第一个成功解决(fulfilled)的 Promise 的结果。

语法

Promise.any(iterable)
  • iterable:一个可迭代对象(如数组),其中包含多个 Promise。

返回值

  • 返回一个新的 Promise。
  • 如果至少有一个 Promise 成功解决(fulfilled),则返回该 Promise 的解决值。
  • 如果所有的 Promise 都被拒绝(rejected),则返回一个拒绝的 Promise,并带有一个 AggregateError,其中包含所有被拒绝的错误。

示例代码

const promise1 = Promise.reject('Error 1');
const promise2 = new Promise((resolve) => setTimeout(resolve, 100, 'Success 2'));
const promise3 = new Promise((resolve) => setTimeout(resolve, 200, 'Success 3'));

Promise.any([promise1, promise2, promise3]).then((value) => {
  console.log(value); // "Success 2"
}).catch((error) => {
  console.log(error);
});

在这个例子中,promise2 是第一个成功解决的 Promise,所以 Promise.any() 返回 promise2 的解决值 “Success 2”。

如果所有的 Promise 都被拒绝,Promise.any() 将返回一个包含所有拒绝原因的 AggregateError。

const promise1 = Promise.reject('Error 1');
const promise2 = Promise.reject('Error 2');
const promise3 = Promise.reject('Error 3');

Promise.any([promise1, promise2, promise3]).then((value) => {
  console.log(value);
}).catch((error) => {
  console.log(error); // AggregateError: All promises were rejected
});

使用场景说明

  1. 从最快的服务器检索资源

    当需要从多个服务器获取资源,并且只关心哪个服务器响应最快时,可以使用 Promise.any()。例如,一个网站可能有多个服务器,用户访问时,可以使用 Promise.any() 从响应最快的服务器接收数据。

  2. 容错处理

    在执行多个可能失败的异步操作时,如果只需要其中一个成功的结果,可以使用 Promise.any()。例如,从多个数据源获取数据,只要有一个数据源成功返回数据,就可以使用这些数据。

  3. 超时与重试机制

    在需要实现超时与重试机制的异步操作中,Promise.any() 可以与设置超时的 Promise 结合使用。例如,发送一个网络请求,并同时设置一个超时 Promise,如果请求在超时前完成,则返回请求的结果;如果请求超时,则返回超时错误。

  4. 并行任务处理

    当需要并行处理多个任务,并且只需要其中一个任务成功完成时,可以使用 Promise.any()。例如,同时执行多个计算任务,只要有一个任务成功计算出结果,就可以使用该结果。

总的来说,Promise.any() 是一个有用的工具,用于处理多个 Promise 并获取第一个成功的结果。它特别适用于需要从多个异步操作中获取第一个成功结果,或者实现容错处理和超时与重试机制的场景。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。