加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 09:34:03 所属栏目:百科 来源:网络整理
导读:如果取消提交尚未解决一段时间后,我想向用户显示超时错误. 我已经看到了一些在这里添加setTimeout来获取的好例子: https://github.com/github/fetch/issues/175 但是,如何处理同时使用redux的获取承诺?例如. export function getData() { return (dispatch
如果取消提交尚未解决一段时间后,我想向用户显示超时错误.

我已经看到了一些在这里添加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)))
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读