在使用rxjs
时,我经常订阅我的源Observable并使用onData
和onError
处理程序,附加一些需要注意的逻辑每个案例。看起来像这样:
this.myService.myObservable().subscribe(
() => this.onNextData(),
() => this.onErrorData()
);
然后(有时),在每个处理程序内部,我将执行相同的逻辑,例如,在成功时关闭模式,在失败时关闭模式。
我看到有一个 finalize
运算符,我可以通过管道来执行一些基于 onComplete
和 onError
的逻辑。然而,这两种状态是一样的吗? Observable 在发出数据时是否必须完整
?
示例:
this.myService.myObservable()
// modalClose always happens on success and on failure (?)
.pipe(finalize(() => this.modalClose())
.subscribe(
() => this.onNextData(),
() => this.onErrorData()
);
最佳答案
不,Observable 在发出数据时不一定完整
。
与 Promise 不同,Observable 是为多次发射而明确设计的 - 因此它们在单次发射后总是完成
是没有意义的。
将 complete
视为 Observable 所说的“我永远不会向您发送更多数据”。
对于一个非常常见的用例,例如发出网络请求 - 它通常会发出一个值或一次错误,然后完成
。
对于不同的用例,例如应用程序的一个部分与另一部分通信 - 它会发送多条消息,并且只有在源被删除时才完整
,这是正常的。
来自documentation :
Observables are lazy Push collections of multiple values. They fill the missing spot in the following table:
关于rxjs - Observable 发出数据时是否一定完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57328846/