首页 > 解决方案 > Observable 在发出数据时是否必须完成?

问题描述

使用 时rxjs,我经常订阅我的源 Observable 并使用onDataonError处理程序,附加一些逻辑来处理每种情况。这看起来像:

this.myService.myObservable().subscribe(
    () => this.onNextData(),
    () => this.onErrorData()
);

然后(有时),在每个处理程序内部,我将执行相同的逻辑,例如,在成功失败时关闭模式。

我看到有一个finalize我可以通过管道执行一些基于onCompleteand的逻辑的运算符onError。但是,这两种状态是否相同?Observablecomplete在发出数据时是否必然?

例子:

this.myService.myObservable()
    // modalClose always happens on success and on failure (?)
    .pipe(finalize(() => this.modalClose())
    .subscribe(
        () => this.onNextData(),
        () => this.onErrorData()
);

标签: rxjs

解决方案


不,Observable 不一定complete在它发出数据时。

与 Promise 不同,Observables 是为多次发射而明确设计的——因此它们总是complete在一次发射之后是没有意义的。

将Observablecomplete视为“我永远不会向您发送更多数据”的说法。

对于一个非常常见的用例,比如发出一个 Web 请求 - 它会发出一个值或一个错误,然后是正常的complete

对于不同的用例,例如应用程序的一部分与另一部分通信 - 它会发送多条消息并且仅complete在源被删除时才会发送。


文档中:

Observables 是多个值的惰性 Push 集合。他们填补了下表中的缺失点:

桌子


推荐阅读