【问题标题】:How can I make an observable emit only latest value and not past values如何使 observable 只发出最新值而不是过去值
【发布时间】:2019-11-04 17:29:35
【问题描述】:

我有一个ConnectableObservable,它是BehaviourSubject 的一部分。

question$: ConnectableObservable<Result>;
private questionSubject: BehaviorSubject<Result>; 

this.questionSubject = new BehaviorSubject<Result>(new Result('initial',{}));
this.question$ = (this.questionSubject.asObservable()).pipe(publish()) as ConnectableObservable<Result>;

当收到来自服务器的响应时,我使用next 方法来处理emit 值。

this.questionSubject.next(new Result(response.result,getQuestionResponse));

Subject 似乎也在发出过去的值。

    jsonQuestion response:  {"question-id":"78830909-b23e-4345-bc69-63f3ce039b20",...} //SUBJECT SENDS THIS
question-details.component.ts:369 got stream value  Result {result: "success", additionalInfo: "{"question-id":"78830909-b23e-4345-bc69-63f3ce039b…2-ae23-f284213ff80a"},"is-question-creator":true}"}// OBSERVABLE RECEIVED THIS
... AND THE SAME TRACE COMES AGAIN!!
question-details.component.ts:369 got stream value  Result {result: "success", additionalInfo: "{"question-id":"78830909-b23e-4345-bc69-63f3ce039b…2-ae23-f284213ff80a"},"is-question-creator":true}"}

为什么 Observable 发送多个值。我怎样才能让它只发送最新的值?

【问题讨论】:

  • BehaviorSubject 就是这样做的。它总是首先发出缓冲的值。
  • 也许您需要改用主题?
  • 您是否有多个订阅 this.question$?生成这些消息的详细代码是什么样的?
  • DeborahK - 你这个天才!问题确实是多个订阅。我的组件将订阅,但我没有在onDestroy 上取消订阅。为了大家的利益,您能否提交一个答案并解释为什么多个订阅是问题?
  • 完成......................

标签: rxjs angular6 angular2-observables rxjs-observables


【解决方案1】:

当您看到从 Subject 或 BehaviorSubject 发出多条相同消息时,问题可能是您有多个订阅。

您可以通过多次订阅或不适当地处理订阅来获得多个订阅。

我必须查看您的订阅才能更具体。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多