Promise.all 实现监听几个异步操作(例如:请求)都执行完毕

Promise.all文档地址

场景:一个商品table,需要批量改变商品的状态为已下架,刚好后端没有批量修改的接口,需求前端批量调用改变单个商品状态的接口,而且改变状态会受到其他字段的影响,可能会出现改变失败的情况。现在需要把改变状态失败的商品和原因提示给用户。

解决思路: 通过Promise.all 监听所有请求,并在所有请求结束后做操作。

代码:

// 模拟axios请求
function postHello(params){
    return new Promise((resolve,reject) =>{
      setTimeout(() => {
        // 模拟请求失败
        if(params === 3 || params === 4){
          console.log('执行失败fun:'+params)
           reject('err'+params)
        }else{
          console.log('执行完毕fun:'+params)
         	resolve('back'+ params)
        }
      }, 1000+Math.random()*100);
    })
}

let postList = []
for(let item of [1,2,3,4,5,6]){
  postList.push(postHello(item))
}


Promise.all(postList).then(res=>{
  // 全部执行正确进入返回结果list
  console.log(res)
}).catch(err=>{
  // 捕获第一条执行错误的结果,所有请求依然执行。
  console.log(err)
})

问题1:这样只能捕获到第一条错误
解决方案:要后端改接口,无论改变成功或者失败,状态码都是200,都返回一个对象。然后再根据对象里的状态字段,前端判断是否改变成功,把状态字段为失败的msg信息组合起来显示给用户。

你可能感兴趣的:(javascript原生,javascript)