Promise.all同时处理多个请求

20 篇文章 0 订阅

需求:多个请求,不管成功或失败,都希望拿到这些请求的结果,比如,第一个请求失败了,后面的请求还是继续,请问怎么实现?

  • 初版
  1. 将所有的异步请求的结果放入一个数组
  2. 使用 Promise.all 来处理
  3. 代码如下:

//    Vue.prototype.$http = axios 
    data() {
      return {
        data: {},
        ids:['https://cnodejs.org/api/v1/topics','https://cnodejs.org/api/v1/topic/5433d5e4e737cbe96dcef3122','https://cnodejs.org/api/v1/user/alsotang']
      }
    },

      getPromiseArray(groupIds) {
        let promiseArray = []
        for (let groupId of groupIds) {
          let promise = this.$http.get(groupId)
          promiseArray.push(promise)
        }
        return promiseArray
      },

      getAllResults(groupIds, callBack) {
        let allResults = []
        Promise.all(this.getPromiseArray(groupIds)).then(function (values) {
          console.log(values,'values')
          for (let i = 0; i < values.length; i++) {
            allResults.push(values[i].data)
          }
          callBack(allResults)
        })
      },
    mounted(){
      this.getAllResults(this.ids,(datas)=>{console.log(datas)})
    }

结果:能正常运行,最后确实得到了所有的结果
问题:这三个异步都成功的时候才能得到正确结果,如果有一个失败了程序就走不下去了.........
怎么解决?

  • 加强版
  1. 加 .then ,将成功或是失败的结果都 return 出去
  2. 失败的结果处理一下再return
  3. 代码:

getPromiseArray(groupIds) {
        let promiseArray = []
        for (let groupId of groupIds) {
        let  promise = this.$http.get(groupId).then((res)=>{return res},(err)=> {return err.toString()})
          promiseArray.push(promise)
        }
        return promiseArray
      },

      getAllResults(groupIds, callBack) {
        let allResults = []
        Promise.all(this.getPromiseArray(groupIds)).then(function (values) {
          console.log(values,'values')
          for (let i = 0; i < values.length; i++) {
            if(values[i].data){
              allResults.push(values[i].data)
            } else {
              allResults.push(values[i])
            }
          }
          callBack(allResults)
        })
      },

如此,程序就能正常运行了
需求也就解决了

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值