当前位置 : 主页 > 网页制作 > React >

reactjs – 如何将setTimeout添加到使用redux的获取承诺?

来源:互联网 收集:自由互联 发布时间:2021-06-15
如果取消提交尚未解决一段时间后,我想向用户显示超时错误. 我已经看到了一些在这里添加setTimeout来获取的好例子: https://github.com/github/fetch/issues/175 但是,如何处理同时使用redux的获取
如果取消提交尚未解决一段时间后,我想向用户显示超时错误.

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

但是,如何处理同时使用redux的获取承诺?例如.

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上开火.更多这里 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)))
  }
}
网友评论