【问题标题】:React Redux Thunk fetch: execute action based on result of dispatch / fetchReact Redux Thunk fetch:根据 dispatch/fetch 的结果执行动作
【发布时间】:2017-06-12 06:48:53
【问题描述】:

使用 React & Redux & Redux-Thunk,尝试制作这个伪代码:

 // 伪代码
    调度(makeServiceRequest)
    如果失败
      调度(makeIdentityRequest)
      如果成功
        调度(makeServiceRequest)
      结尾
    结尾

想要避免代码放在makeServiceRequest.catch 块内时会发生的无限循环。

我在调度操作中使用fetch(url).then(...).catch(...) 逻辑。 fetchdoes not reject on HTTP status errors

如何实现这个伪代码?处理这种情况的正确模式是什么?

【问题讨论】:

    标签: reactjs redux infinite-loop redux-thunk


    【解决方案1】:

    只要有一个 then 来检查 HTTP 状态,如果它不是成功状态则抛出错误,就像链接中所说的那样:

    function checkStatus(response) {
      if (response.status >= 200 && response.status < 300) {
        return response
      } else {
        var error = new Error(response.statusText)
        error.response = response
        throw error
      }
    }
    
    fetch(url).then(checkStatus).then(...).catch(...);
    

    除此之外,我不清楚您的 Redux 特定问题是什么。

    编辑:根据您的 cmets,我想您是在问如何管理 Redux 操作,这些操作在分派时可以异步分派其他操作。将其建模为“传奇”的一种方法。有一个名为 redux-saga 的 Redux 库可以让您对这类事物进行建模。

    【讨论】:

    • dispatch(makeServiceRequest) 执行上述fetch.then.catch 代码。但是,如果失败,它应该makeIdentityRequest 然后再次尝试makeServiceRequest。在您的示例中,故障线会出现,对吗?如果是这样,makeIdentityRequest 和第二个makeServiceRequest 需要同步,或者第二个makeServiceRequest 需要在makeIdentityRequest 的捕获中。同步可能意味着无限循环,而在捕获中将是应用程序其余部分的意外行为。我理解正确吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2018-01-12
    • 2019-08-01
    • 2020-06-05
    • 2017-07-27
    • 2021-07-19
    相关资源
    最近更新 更多