gpt4 book ai didi

angular - RxJS switchMap 和不同的可观察对象

转载 作者:行者123 更新时间:2023-12-05 08:23:11 29 4
gpt4 key购买 nike

Angular 和 RxJS 的新手,试图稍微了解一下...我的应用程序对 UI 事件使用react,结果调用返回 Observable 的 HTTP 服务。我这样订阅:

this.myXYZService.search(query)
.map(r => { // some code })
.subscribe(r => { //some code });

假设该事件再次触发,并导致对同一个 HTTP 服务进行第二次调用,该服务将在第一次调用完成之前返回一个全新的 Observable。

现在,据我了解,我可以使用 switchMap 而不是 map 来丢弃旧的 Observable 并在新的 Observable 上操作吗?还是我理解有误?如果在第一个事件已经在链的订阅部分中之后触发第二个事件,会发生什么情况?这样的话就不会再切换了?既然 JS 是同步的,那么在第二个事件甚至开始处理它的链之前,整个第一个链不会执行吗?

我想我对整个事情感到困惑,因为 Observables 的实例是不同的——Rx 如何跟踪要切换的调用?是函数名吗?假设我有 2 个独立的代码块:

this.myXYZService.search('abcd')
.map(r => { // some code })
.subscribe(r => { //some code });

this.myXYZService.search('efgh')
.map(r => { // some code })
.subscribe(r => { //some code });

如果我对以上两个都使用 switchMap 到底会发生什么?第二个调用会抵消第一个吗?

最佳答案

switchMap 在外部 observable 发出时取消之前的内部 observable。例如

Observable.fromEvent(inputEl, 'keydown') // outer observable
.switchMap(event => {
let value = event.value;

return this.myXYZService.search(value); // inner observable
})
.subscribe(res => {
// some code
});

在这种情况下,每次外部可观察对象 (fromEvent) 发出(在输入元素的键按下时),都会调用内部可观察对象 (myXYZService.search) 并取消先前的内部可观察对象。

关于angular - RxJS switchMap 和不同的可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47661168/

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