gpt4 book ai didi

angular - 如何取消 ngxs 调度操作

转载 作者:行者123 更新时间:2023-12-04 10:18:12 25 4
gpt4 key购买 nike

如何取消正在运行的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com