Promise.all妙用

promise.all()该方法用于将多个Promise实例,包装成一个新的Promise实例。

问题:(请求采用的是jquery的ajax)通过接口a获取数据列表List1,需要对list1中每项通过id进行校验(通过接口b进行校验),并将校验结果添加属性值verifyStatus,并渲染到vue2的项目中

解决办法:

对a和b的请求用Promise包裹,resolve(res),然后用Promise.all(所有要校验的promise数组)就可全部获得,

Promise.all 里面参数为一个数组,数组的每一项是一个返回promise 的函数调用

  • Promise.all([fn(),fn()]) 都返回resolve(); 才能够拿到成功的返回值
  • Promise.all([fn(),fn()]) 有一个返回reject(), 则进入catch(error), 拿到失败的返回值
verifyAgree: function (did, aj) {//校验接口b
    return new Promise((resolve, reject) => {
      $.ajax({
        url: global_ip + '',
        dataType: 'json',
        type: 'post',
        data: {
          token: ls_token,
          did: did,
          aj: aj,
        }
      }).done(function (res) {
        tokenFail(res);
        let data = {
          aj: aj,
          status: res.status,
          info: res.info
        }
        resolve(data)
      }).fail(function (err) {
        reject(err);
      })
    })
  },
//veriList.data为a接口的请求数据
veriList.data.forEach(item => {
          arr.push(ajax.verifyAgree(vthis.$data.did, item.ajnum))
        })
try{
          let res = await Promise.all(arr)
          veriList.data.forEach(item => {
            console.log(res);
            res.forEach(item1 => {
              if (item.ajnum == item1.aj) {
                item.veriAgree = item1.status
              }
            })
          })
          vthis.$data.subList.rows = veriList.data
          vthis.$data.subList.total = veriList.data.length;
          vthis.$data.subList.allPage = veriList.data.length / vthis.$data.subList.size;
          $('.layer').fadeIn(300).find('.set_subManage').show().siblings().hide();
        }catch (e) {
          
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值