在您的代码中,使用 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;});});
版权归原作者 懒大王、 所有, 如有侵权,请联系我们删除。