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中处理成功和失败  
    return getImgUrl({ 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;  
  });  
});
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校实践教学模式的案例研究 五、新代研究生科学素养培育的建当使用 `Promise.all` 发送多个请求,如果其中一个请求失败,您可以使用 `catch` 方法来捕捉到失败请求,并进行相应的处理。 以下是一个示例代码: ```javascript const requests = [request1(), request议与措施 5.1 加强教师队伍建设,提高教师科学素养 5.22(), request3()]; Promise.all(requests) .then(responses => { // 处理所有请求成功的情况 创造良好的学习环境,激发研究生的学习兴趣和能动性 5.3 强 // responses 数组包含所有请求的响应结果 }) .catch(error => { // 处理至少一个化实践教学,培养研究生的实践能力和创新精神 结论: 本论文通过请求失败的情况 // error 包含失败请求的错误信息 console.error('至少一个请求失败:', error对新代下研究生科学素养培育的探索与研究,提出了一系列可行); // 可以根据具体需求进行不同的处理,例如: // - 忽略失败请求,继续处理成功的请求 // - 中止后续请求,直接处理错误情况 // - 回滚已的策略和方法。这些策略和方法包括课程改革、创新能力培养和实践教经完成的请求 }); ``` 在 `catch` 方法中,您可以根据实际情况决定如何处理学等方面,旨在提高研究生科学素养的培育水平,培养更多具备创失败请求。例如,您可以选择忽略失败请求,继续处理成功的请求,或者中止后续请求,并直接处理错误情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值