过滤掉非200状态码axios

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

当同时处理请求时,如果有非200代码,它将被捕获在catch块中,而不是我想过滤掉它们。似乎可以使用node fetch但不能使用axios,还有其他方法吗?

  1. try {
  2. const requests = urls.map((url) => axios.get(url));
  3. const responses = await axios.all(requests);
  4. const failedResponses = responses.filter(
  5. (response) => response.status !== 200
  6. );
  7. } catch (error) {
  8. console.error(error)
  9. }

我不想在catch块中抛出一个错误,我想过滤掉错误。

oknwwptz

oknwwptz1#

您可以利用Promise. allSettled过滤Axios并行请求场景中的失败响应。以下是如何调整代码来实现这一点~

  1. const requests = urls.map((url) => axios.get(url));
  2. const responses = await Promise.allSettled(requests);
  3. const successfulResponses = responses
  4. .filter(({
  5. status
  6. }) => status === 'fulfilled')
  7. .map(({
  8. value
  9. }) => value);
  10. const failedResponses = responses
  11. .filter(({
  12. status
  13. }) => status === 'rejected')
  14. .map(({
  15. reason
  16. }) => reason);
  17. // Handle successfulResponses and failedResponses as needed

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

展开查看全部

相关问题