0


Promise.all当有一个请求失败时 导致所有后续的处理都停止优化方案

在您的代码中,使用 Promise.all 来处理多个异步请求(这里是获取图片URL)是一个常见且有效的方法。但是,当其中一个请求失败时,Promise.all 会立即拒绝整个Promise数组,导致所有后续的处理都停止。为了优化这一点,您可以使用 Promise.allSettled 来代替 Promise.all,这样即使某个请求失败,其他请求仍然可以继续执行,并且您可以在所有请求完成后处理每个请求的结果(无论成功还是失败)

getListAll(params).then(res=>{const imgPromises = res.data.data.map(item=>{  
    item.checked =false;// 使用 getImgUrl 返回一个Promise,并在Promise中处理成功和失败  returngetImgUrl({fileId: item.ossPath }).then(url=>{  
      item.url = url;  
      item.status ='success';// 标记请求成功  return item;}).catch(error=>{  
      item.url =null;// 或者设置为错误图片URL  
      item.status ='error';// 标记请求失败  
      item.error = error;// 可选:保存错误信息  return item;});});// 使用 Promise.allSettled 而不是 Promise.all  
  Promise.allSettled(imgPromises).then(results=>{// 过滤出所有成功的结果  const updatedItems = results.map(result=>{if(result.status ==='fulfilled'){return result.value;}// 如果需要,可以处理失败的请求结果  // 这里只是简单地将其包含在返回的数组中  return result.reason;// 注意:这里通常不返回reason,因为reason是错误对象  // 更好的做法是返回带有错误信息的原item  return{...result.reason,status:'error'};}).filter(item=> item !==undefined);// 移除因错误而可能返回的undefined  
  
    imgList.value = updatedItems;  
    loading.value =false;}).catch(error=>{// 处理 Promise.allSettled 外的错误(虽然这里不太可能发生)  
    console.error('Unexpected error:', error);  
    imgList.value =[];// 或者设置为错误状态  
    loading.value =false;});});

本文转载自: https://blog.csdn.net/qq_43987527/article/details/140369672
版权归原作者 懒大王、 所有, 如有侵权,请联系我们删除。

“Promise.all当有一个请求失败时 导致所有后续的处理都停止优化方案”的评论:

还没有评论