rxjs开关展开可观察

rxjs开关展开可观察,rxjs,Rxjs,我设置了一个主题,然后在上面添加了一些方法。在到达.switch()之前,它似乎一直按预期工作,我认为它只会跟踪最后一次调用。我得到一个错误,属性'subscribe'在类型'ApiChange'上不存在。它似乎将它从一个可观察对象转换为类型ApiChange。我不理解这种行为。我应该使用不同的操作符吗 服务: private apiChange = new Subject<ApiChange>(); apiChange$ = this.apiChange.asObserv

我设置了一个主题,然后在上面添加了一些方法。在到达.switch()之前,它似乎一直按预期工作,我认为它只会跟踪最后一次调用。我得到一个错误,
属性'subscribe'在类型'ApiChange'上不存在。
它似乎将它从一个可观察对象转换为类型ApiChange。我不理解这种行为。我应该使用不同的操作符吗


服务:

  private apiChange = new Subject<ApiChange>();
  apiChange$ = this.apiChange.asObservable().distinctUntilChanged().debounceTime(1000).switch();
  this.service.apiChange$.subscribe(change => {
            this.service.method(change);
        });
.debounceTime(1000)将确保每秒只能从可观察链中获得最多一个值。1秒安静时间之前的所有值都将被丢弃

对于简单的主题(而不是重播主题),过去的值不会提供给订阅者


您可能只想跳过.switch(),享受没有它的链条。

嘿!你能帮我澄清一下“跟踪最后一个电话”是什么意思吗?switch()期望在高阶可观测链(发射可观测值而非值的可观测值)上被调用,只是最近的选择是返回的。你能给我一个例子说明你的意思吗:switch()期望在高阶可观测链(发射可观测值而非值的可观测值)上被调用文档[1]中的示例显示了一种情况,其中发出的是可观测值,而不是值。[1] 我将在你澄清你的意思的基础上尝试一个答案,实际上我在寻找什么。这很有道理。嗯,如果一个电话在去抖动后被触发,而返回的时间比另一个电话要短,那么它就不起作用了。如果没有更多的上下文,我就很难做出有用的评论。您能否帮助澄清您是否将http调用作为subscribe方法的一部分,并且仅在其他subscribe方法中使用它的结果?然后我建议使用switchMap()作为可观察链的一部分,并在那里进行http调用。这将“取消”以前的http调用,并且只处理最新的响应。我希望有一个订阅服务器调用进行http调用的方法。尝试像这样使用switchMap
apiChange$=this.apiChange.asObservable().debounceTime(1000).switchMap((数据)=>{返回新的可观察对象(观察者=>observate.next(数据));})
在取消以前的http调用时,我想做的事情完全正确,我只是不知道如何做。我猜切换图不起作用,因为我实际上正在为每个人创建新的观察者?请加入我的聊天,进一步讨论这个问题。