Javascript 如何取消ComponentWillUnmount中的所有请求?

Javascript 如何取消ComponentWillUnmount中的所有请求?,javascript,reactjs,Javascript,Reactjs,根据,ComponentWillUnmount能够取消请求 我有一个页面,请求加载iframe,以及其他页面请求。如果用户决定在页面仍在处理请求时离开该页面,我如何取消这些请求,从而不影响用户此后访问的其他页面 我应该注意,我使用的是Redux和Redux saga。只要把组件将卸载作为一个opportunity函数就可以了。这是您的机会,可以按照文档中的说明执行React自己无法完成的任何额外清理 就XHR请求而言,您需要一个支持取消承诺的承诺库。如果您使用的库确实支持这一点,那么在组件wil

根据,ComponentWillUnmount能够取消请求

我有一个页面,请求加载iframe,以及其他页面请求。如果用户决定在页面仍在处理请求时离开该页面,我如何取消这些请求,从而不影响用户此后访问的其他页面


我应该注意,我使用的是Redux和Redux saga。

只要把
组件将卸载作为一个opportunity函数就可以了。这是您的机会,可以按照文档中的说明执行React自己无法完成的任何额外清理


就XHR请求而言,您需要一个支持取消承诺的承诺库。如果您使用的库确实支持这一点,那么在
组件willunmount
中,您只需确保您有权访问所有承诺并取消每个承诺即可


至于取消任何其他内容,您只需要使用为您提供的函数来取消您想要取消的内容。如果它们是一个取消它的函数,那么如果您需要在卸载组件时取消它,请使用
组件willunmount
的性质来执行此操作


举个例子来说明我们在我所处的位置是如何使用它的:如果一个组件要发出请求,我们在该组件上设置一个属性,该属性是一个数组并保存所有请求。我们称之为
this.statePromissions
。无论何时提出请求/承诺,我们都会将该承诺写入
this.statePromissions
。在
组件willunmount
中,我们有以下内容

componentWillUnmount() {
  this.statePromises.forEach(p => p.cancel());
 }

p是一个承诺。这仅仅是因为图书馆,蓝鸟,我们用我们的承诺。但这会让您了解如何使用
组件willunmount
进行任何额外的清理

从技术上讲,您不能取消或中止承诺,因为web浏览器不公开任何执行此操作的方法

相反,如果用户导航到另一个页面,您可以忽略这个承诺。有两种方法可以做到这一点:

使用Redux、Thunk和promise中间件 您不应该将应用程序状态存储在组件状态中。通过使用Redux,应用程序状态将在所有组件之间共享。然后与中间件结合使用,在Redux中处理异步操作

简单地说,在你的行动中,你可以这样做:

case 'LOAD_ORDERS_SUCCESS':
  if state.location != 'orders' { return }

  // store the data in the application state
使用RxJS和可观测值 可观察性是承诺的另一种方式

有一个叫做Netflix的库和一个来自Netflix的库,它解释了如何准确地使用Observable。在他们的文档中查看此信息:

const fetchUserEpic = action$ =>
  action$.ofType(FETCH_USER)
    .mergeMap(action =>
      ajax.getJSON(`/api/users/${action.payload}`)
        .map(fetchUserFulfilled)
        .takeUntil(action$.ofType(FETCH_USER_CANCELLED))
    );

组件将卸载
无法取消“请求”。这是一个你应该进行任何必要清理的地方。这到底是什么取决于你在做什么,与反应无关。因此,如果您有一个关于中止加载iframe的特定问题,您应该问这个问题(同样,这与React无关)。然而,已经有一个问题: