在使用rxjs
时,我经常订阅我的源Observable,并使用onData
和onError
处理程序,并附加一些逻辑来处理每种情况。看起来像这样:
this.myService.myObservable().subscribe(
() => this.onNextData(),
() => this.onErrorData()
);
然后(有时)在每个处理程序中,我将执行相同的逻辑,例如,在成功时关闭模式,在失败时关闭模式。
我看到有一个finalize
运算符可以通过管道传递,该运算符将基于onComplete
和onError
执行一些逻辑。但是,这两种状态都相同吗?可观察对象发出数据时是否一定complete
?
示例:
this.myService.myObservable()
// modalClose always happens on success and on failure (?)
.pipe(finalize(() => this.modalClose())
.subscribe(
() => this.onNextData(),
() => this.onErrorData()
);
答案 0 :(得分:2)
否,可观察对象发出数据时不一定complete
。
与承诺不同,可观测对象是为多种排放量而专门设计的-因此,对它们而言,在单个排放量之后始终complete
毫无意义。
将complete
视为“我永远不会再向您发送更多数据”。
对于一个非常常见的用例,例如发出Web请求-通常会先发出一个值或一个错误,然后发出complete
。
对于另一种用例,例如应用程序的一部分与另一部分进行通信-通常,它会发送多条消息,并且在移除源后仅发送complete
。
Observables是多个值的惰性Push集合。他们填补 下表中缺少的位置: