如有必要,我尝试使用retry-axios在我的React应用程序中重复一些请求,但是我不知道如何拦截已经开始的重试周期。
想象一下您在某个页面上,某些内容正在加载很长的时间(具有重试功能的api调用),然后您决定离开该页面。我看到的是retry-axios
重复该调用,直到调用成功或直到retry
配置计数超过为止。我想以某种方式在React componentWillUnmount()
中进行拦截,这可能吗?
目前,对于所有我不想重试的常规api调用,我都有PendingPromise
类,并且我正在this.pendingPromises.cancelAll()
生命周期方法中调用componentWillUnmount()
,但是这种方法没有与retry-axios
合作。
export default class PendingPromise {
pendingPromises = []
create(promise) {
let hasCanceled_ = false
const wrappedPromise = new Promise((resolve, reject) => {
promise.then(
val => (hasCanceled_ ? reject({ isCanceled: true }) : resolve(val)),
error => (hasCanceled_ ? reject({ isCanceled: true }) : reject(error))
)
})
const cancelablePromise = {
promise: wrappedPromise,
cancel() {
hasCanceled_ = true
}
}
this._appendPendingPromise(cancelablePromise)
return cancelablePromise
}
_appendPendingPromise(promise) {
this.pendingPromises = [...this.pendingPromises, promise]
}
remove(promise) {
this.pendingPromises = this.pendingPromises.filter(p => p !== promise)
}
cancelAll() {
this.pendingPromises.map(p => p.cancel())
}
}