rxjs - Observable 在发出数据时是否必须完成?
问题描述
使用 时rxjs
,我经常订阅我的源 Observable 并使用onData
和onError
处理程序,附加一些逻辑来处理每种情况。这看起来像:
this.myService.myObservable().subscribe(
() => this.onNextData(),
() => this.onErrorData()
);
然后(有时),在每个处理程序内部,我将执行相同的逻辑,例如,在成功和失败时关闭模式。
我看到有一个finalize
我可以通过管道执行一些基于onComplete
and的逻辑的运算符onError
。但是,这两种状态是否相同?Observablecomplete
在发出数据时是否必然?
例子:
this.myService.myObservable()
// modalClose always happens on success and on failure (?)
.pipe(finalize(() => this.modalClose())
.subscribe(
() => this.onNextData(),
() => this.onErrorData()
);
解决方案
不,Observable 不一定complete
在它发出数据时。
与 Promise 不同,Observables 是为多次发射而明确设计的——因此它们总是complete
在一次发射之后是没有意义的。
将Observablecomplete
视为“我永远不会向您发送更多数据”的说法。
对于一个非常常见的用例,比如发出一个 Web 请求 - 它会发出一个值或一个错误,然后是正常的complete
。
对于不同的用例,例如应用程序的一部分与另一部分通信 - 它会发送多条消息并且仅complete
在源被删除时才会发送。
从文档中:
Observables 是多个值的惰性 Push 集合。他们填补了下表中的缺失点:
推荐阅读
- vb.net - 当我运行程序时,出现错误(cmd.executenonquery)
- python - 使用 python 对 CSV 文件进行更改
- python-3.x - Python:刷新本地文件夹
- r - 基于R中的模拟数据计算均方预测误差
- amazon-web-services - AWS Lambda:如何从配置中删除环境变量
- codeigniter - 错误 codeigniter 为同一用户生成多个会话
- c# - VB.Net 到 C# 的转换
- google-cloud-platform - 在谷歌云中,从 VM 终端(ssh 或 telnet)中找到 VM 的临时 IP 地址
- sql - 如何在 MS Access 中将字段更改为 SSN 格式(###-##-####)?
- twitter-bootstrap-3 - Bootstrap 表和 Bootstrap 4 支持