reactjs - 如何将 setTimeout 添加到使用 redux 的 fetch Promise 中?

标签 reactjs react-native redux promise fetch-api

在一段时间后,如果获取 promise 尚未得到解决,我想向用户显示超时错误。

我在这里看到了一些添加 setTimeout 来获取的很好的例子: https://github.com/github/fetch/issues/175

但是我如何处理也使用 redux 的 fetch Promise 超时问题?例如

export function getData() {
  return (dispatch, getState) => {
    fetch('blah.com/data')
    .then(response => response.json())
    .then(json => dispatch(getDataSuccess(json)))
    .catch(
      error => {
        console.log(error)
      }
    )
      dispatch({
        type: DATA_FETCH_REQUEST
      })
  }
}

感谢您的阅读!

最佳答案

我一直渴望有一个使用 Promise.race 的理由,它非常适合这个用例。 Promise.race 等待第一个解析或第一个拒绝。因此,如果先触发拒绝,那么它永远不会触发 Promise.race 上的 then。更多这里https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race 。抱歉,我没有机会测试代码。

export function getData() {
  return (dispatch, getState) => {
    let timeout = new Promise((resolve, reject) => {
      setTimeout(reject, 300, 'request timed out');
    })
    let fetch = new Promise((resolve, reject) => {
      fetch('blah.com/data')
        .then(response => response.json())
        .then(json => resolve(json))
        .catch(reject)
    })
    return Promise
      .race([timeout, fetch])
      .then(json => dispatch(getDataSuccess(json)))
      .catch(err => dispatch(getDataTimeoutOrError(err)))
  }
}

关于reactjs - 如何将 setTimeout 添加到使用 redux 的 fetch Promise 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38512238/

相关文章:

reactjs - 使用 mapStateToProps 连接时“无法读取未定义的属性 'map'”

javascript - React-Redux 如何知道要传递什么存储片段?

reactjs - 错误 : A cross-origin error was thrown. 错误:应该设置一个 secret

android - 问题: Why react native video does not play video in full screen?

reactjs - 无法从 FlatList 中导航到新屏幕

react-native - 在我卸载 Audio.Sound() 并移动屏幕后调用方法

node.js - 多部分表单组件 "cannot POST/divespotform"无法正常工作 parseInt 问题?

javascript - 在 Redux Form 中,如何设置复选框的选中属性的初始值?

typescript - 如何在 Typescript 中编写严格要求其参数的函数类型

javascript - 无法从 Redux 存储读取状态。我错过了什么?