关于promise.all处理reject求助

发布于 2022-09-06 05:50:46 字数 515 浏览 8 评论 0

 let resultData = []
        try {
          resultData = await Promise.all([
            this.get(API.getCustomSpeech),
            this.get(API.getUserConfiguration),
            this.post((API.getFirstConvList))
          ])
        }catch(e){
          console.log(e)
        }

正常情况下resultData是包含三个正确返回结果的数组,但是,当某一个网络请求返回reject时,我在node8下测试的结果是,流程走到catch中,且只返回对应的reject,丢失了其他2个正常的返回结果。

想要的结果是:
能够拿到2个resolve和一个reject。我在catch对reject做错误处理。

promisen能做到吗?

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

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

发布评论

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

评论(2

狼亦尘 2022-09-13 05:50:46

@nurdun

这样写,将2个本来异步的操作变成了同步: 先tet后data,我们需要一种更好的方法,让tet和data异步执行,promise.all接受2个异步的结果,无论是否正确返回,返回的数据都应该保存在promise.all的结果数组中。

或许可以这么做:

toFetch(url){
    return fetch(url)
        .then(res=>res.json())
        .catch(err=>new Promise(resolve=>resolve(err)))

将err结果也封装成resolve返回,这样,所有返回都在promise.all中。

心碎无痕… 2022-09-13 05:50:46

关于promise.all()这种问题确实存在的,可能又解决方法,但是我个人更喜欢用这种方式,你可以参考一下

toFetch(url){
    return fetch(url)
    .then(res=>res.json())
    .catch(er=>er)
  }

  async getData(){
    let user = await this.toFetch('tet.json');
    console.log("name: "+user.name);
    let data = await this.toFetch('data.json');
    console.log("name: "+data.time);
  }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文