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

标签 rxjs

在使用rxjs时,我经常订阅我的源Observable并使用onDataonError处理程序,附加一些需要注意的逻辑每个案例。看起来像这样:

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

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

我看到有一个 finalize 运算符,我可以通过管道来执行一些基于 onCompleteonError 的逻辑。然而,这两种状态是一样的吗? 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:

table

关于rxjs - Observable 发出数据时是否一定完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57328846/

相关文章:

arrays - rxjs 从两个来源追上订阅

angular - 如果使用 RJXS 运算符从 http.get Angular 收到空结果,则重试查询

javascript - Angular HttpInterceptor 通过共享 observable 来缓存并行请求

javascript - RxJs V4 Operator,结合了forkJoin和map

Angular 6 - rxjs 管道不适用于 valueChanges

javascript - RxJs:如何在接收到流时更改订阅的 "listen"?

javascript - 当我在可观察对象的管道中绘制 map 时,对象的类型是什么?

javascript - DebounceTime 发出该时间内捕获的所有事件

javascript - 如何在 redux-observable 的史诗中执行副作用?

rxjs - 在 RxJS 中包装运算符,以便它可以应用于物化流