过滤掉非200状态码axios

iecba09b  于 2023-10-18  发布在  iOS
关注(0)|答案(1)|浏览(147)

当同时处理请求时,如果有非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块中抛出一个错误,我想过滤掉错误。

oknwwptz

oknwwptz1#

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

然后,代码允许您根据应用程序的需要分别处理successfulResponses和failedResponses。这个压缩代码保持了与原始代码相同的功能,但以更简洁和可读的形式呈现。

相关问题