过滤掉非200状态码axios

问题描述 投票:0回答:1

同时进行请求时,如果有非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 块中抛出单个错误,而是想过滤掉错误。

javascript node.js axios httpclient
1个回答
0
投票

您可以利用 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

然后,代码允许您根据应用程序的需求分别处理成功的响应和失败的响应。此压缩代码保留了与原始代码相同的功能,但以更简洁和可读的形式呈现。

© www.soinside.com 2019 - 2024. All rights reserved.