在一段时间后,如果获取 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/