IT评测·应用市场-qidao123.com
标题:
Promise.all当有一个请求失败时 导致所有后续的处理都停止优化方案
[打印本页]
作者:
三尺非寒
时间:
2024-12-1 07:55
标题:
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;
});
});
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4