在您的代码中,使用 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;
- });
- });
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |