Redux observable retry 不会重新发送 API 调用

Posted

技术标签:

【中文标题】Redux observable retry 不会重新发送 API 调用【英文标题】:Redux observable retry does not resend the API call 【发布时间】:2021-01-24 10:16:46 【问题描述】:

我正在使用 redux-observable,并且希望在 API 调用抛出错误时重试 3 次。

但它不会重试,它只发送了一个http请求。

我编写了一个调用 github 用户 api 来查找用户的示例,如果您提供不存在的用户名,例如 This doesn't exist,那么它将引发 404 错误。我添加了retry(3),但它不会重试。

您可以在codesandbox找到代码

export const fetchUserEpic = action$ => action$.pipe(
  ofType(FETCH_USER),
  mergeMap(action =>
    ajax.getJSON(`https://api.github.com/users/$action.payload`).pipe(
      map(response => fetchUserFulfilled(response))
    )
  ),
  retry(3)
);

【问题讨论】:

【参考方案1】:

将您的重试移到内部可观察对象中,如下所示:

export const fetchUserEpic = action$ => action$.pipe(
  ofType(FETCH_USER),
  mergeMap(action =>
    ajax.getJSON(`https://api.github.com/users/$action.payload`).pipe(
      map(response => fetchUserFulfilled(response)),
      retry(3)
    )
  )
);

您的 action$ 实际上并没有失败,而是您要重试的 ajax 调用。

【讨论】:

以上是关于Redux observable retry 不会重新发送 API 调用的主要内容,如果未能解决你的问题,请参考以下文章

redux-observable Promise 在单元测试中没有得到解决

Rxjava2 Observable的错误处理操作详解及实例

redux-observable - 在单个史诗中调度多个 redux 操作

为啥使用 Redux-Observable 而不是 Redux-Saga?

redux-observable笔记

关于redux-observable的一点理解