关于promise.all处理reject求助

 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能做到吗?

阅读 4.2k
2 个回答

@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中。

关于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);
  }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进