根据docs,ComponentWillUnmount能够取消请求.
我有一个页面,可以加载iframe的加载请求,以及其他页面请求.如果用户在页面仍在处理请求时决定离开页面,那么如何取消这些请求以使其不影响用户此后访问的其他页面?
我应该注意到我正在使用Redux和Redux-saga.
最佳答案
从技术上讲,您无法取消或中止承诺,因为Web浏览器不会公开任何方法.
如果用户导航到另一个页面,您可以做的只是忽略承诺.有两种方法可以做到这一点:
使用Redux,Thunk和promise中间件
您不应将应用程序状态存储在组件状态中.通过使用Redux,应用程序状态将在所有组件之间共享.然后将redux-promise-middleware与Thunk中间件结合使用,以处理Redux中的异步操作.
简单地说,在您的行动中,您可以执行以下操作:
case 'LOAD_ORDERS_SUCCESS':
if state.location != 'orders' { return }
// store the data in the application state
使用RxJS和observables
Observables是Promises的另一种方式.
有一个名为redux-observable的库和一个来自Netflix的video,它解释了Observable如何完全用于这个原因.在他们的文档中查看此recipe:
const fetchUserEpic = action$=>
action$.ofType(FETCH_USER)
.mergeMap(action =>
ajax.getJSON(`/api/users/${action.payload}`)
.map(fetchUserFulfilled)
.takeUntil(action$.ofType(FETCH_USER_CANCELLED))
);