Observable发出数据时是否一定要完成?

时间:2019-08-02 14:48:59

标签: rxjs

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

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

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

我看到有一个finalize运算符可以通过管道传递,该运算符将基于onCompleteonError执行一些逻辑。但是,这两种状态都相同吗?可观察对象发出数据时是否一定complete

示例:

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

1 个答案:

答案 0 :(得分:2)

否,可观察对象发出数据时不一定complete

与承诺不同,可观测对象是为多种排放量而专门设计的-因此,对它们而言,在单个排放量之后始终complete毫无意义。

complete视为“我永远不会再向您发送更多数据”。

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

对于另一种用例,例如应用程序的一部分与另一部分进行通信-通常,它会发送多条消息,并且在移除源后仅发送complete


来自documentation

  

Observables是多个值的惰性Push集合。他们填补   下表中缺少的位置:

table