并行请求多个异步接口

发布于 2022-09-13 00:24:41 字数 735 浏览 14 评论 0

当打开页面需要很多初始信息时,需于调用好几个接口,如果采用异步嵌套方式调研会严重延长页面的打开时间。页面打开的时间是所有接口打开时间的和。

所以需要并行请求全部接口,然后只需要等待最慢的接口返回。那么页面打开的时间就是最慢的接口返回数据的时间。

方案1:
先同时请求全部接口,然后开始 await。

const userInfoFc = this.getUser();
const authInfoFc = this.getAuth();
const orgInfoFc = this.getOrgTree();

// await命令后面是一个 Promise 对象

const userInfo = await userInfoFc;
const authInfo = await authInfoFc;
const orgInfo = await orgInfoFc;

方案2

let [userInfo, authInfo] = await Promise.all([this.getUser(), this.getAuth()]);

PS:
Promise.all 如果开发中,all 有一个失败了,如何使程序不走人catch中?

let [userInfo, authInfo] = await Promise.all([this.getUser(), this.getAuth()].map(p=>p.catch(e=>e)));

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半夏半凉 2022-09-20 00:24:41

Promise.allSettled 更适合你,具体文档可看MDN

×纯※雪 2022-09-20 00:24:41

ES2020 新 API Promise.allSettled 就是为了解决 Promise.all 一个挂了直接 reject 问题而生的。

低版本引入 polyfill 或用 babel 转译就好了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文