同时进行请求时,如果有非200的代码,它会被catch块捕获,而不是我想过滤掉它们。似乎可以与 Node fetch 配合使用,但不能与 axios 配合使用,还有其他方法可以做到这一点吗?
try {
const requests = urls.map((url) => axios.get(url));
const responses = await axios.all(requests);
const failedResponses = responses.filter(
(response) => response.status !== 200
);
} catch (error) {
console.error(error)
}
我不想在 catch 块中抛出单个错误,而是想过滤掉错误。
您可以利用 Promise.allSettled 过滤掉 Axios 并行请求场景中的失败响应。您可以通过以下方式调整代码来实现此功能 ~
const requests = urls.map((url) => axios.get(url));
const responses = await Promise.allSettled(requests);
const successfulResponses = responses
.filter(({
status
}) => status === 'fulfilled')
.map(({
value
}) => value);
const failedResponses = responses
.filter(({
status
}) => status === 'rejected')
.map(({
reason
}) => reason);
// Handle successfulResponses and failedResponses as needed
然后,代码允许您根据应用程序的需求分别处理成功的响应和失败的响应。此压缩代码保留了与原始代码相同的功能,但以更简洁和可读的形式呈现。