如何取消正在运行的 store.dispatch(xxx)
行动,这样底层的http请求也被取消了吗?
我试过 .unsubscribe()
来自 store.dispatch(new FetchSomeStuffOverHttp())
调用并期望底层的http请求也被取消。
但它会继续运行,即使 httpClient
的 observable 由操作返回:
@Action(FetchStuffOverHttp)
fetchStuffOverHttp({ patchState }: StateContext<AuftragStateModel>) {
return this.httpClient.get(...)
.pipe(
tap((...) => { patchState(...) })
)
}
store.dispatch(xxx).subscribe().unsubscribe()
是预期的行为吗?不是取消订阅/取消 httpClient
可以观察到吗?相比之下,
{ cancelUncompleted: true }
选项将取消下层 http 请求。
最佳答案
问:如何取消正在运行的 store.dispatch(xxx) Action ,从而使底层的 http 请求也被取消?
A: 如果底层的 http 请求在 Action 返回的可观察链中(即异步 Action ),那么使用 { cancelUncompleted: true }
调度相同的 Action 如果它仍在运行,将取消先前的调度操作。
如果您想取消正在运行的异步操作而不再次分派(dispatch)给它,您将不得不自己从操作的 observable 处理它(例如,使用适当的 rxjs 模式,如 takeUntil()
运算符)。
问:store.dispatch(xxx).subscribe().unsubscribe() 不是取消订阅/取消 httpClients observable 是预期的行为吗?
答:是的。 AFAIK,这是设计和预期的行为。
关于angular - 如何取消 ngxs 调度操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60990332/