rxjs - 具有自定义创建逻辑的 RxJS BehaviorSubject
问题描述
因为BehaviorSubject
extendsSubject
和Subject
extends Observable
,所有这三个都有静态.create(observer)
方法来使用自定义值发射逻辑创建它们。
我能够使用效果很好Observable.create(observer)
,例如:
a = Rx.Observable.create(obs => {
setInterval(() => {
obs.next('tick');
}, 500)
})
s = a.subscribe(v => console.log(v))
给我预期的输出(tick
每 500 毫秒)
但是当我Observable
用Subject
/替换时BehaviorSubject
,它不太愿意启动和运行:
a = Rx.Subject.create(obs => {
setInterval(() => {
obs.next('tick');
}, 500)
})
s = a.subscribe(v => console.log(v)); // Nothing
a.next(5); // Still nothing
基本上,主题似乎只有在通过new
以下运算符创建时才能按预期工作:
a = new Rx.Subject();
s = a.subscribe(v => {console.log(v)});
a.next(5) // Ok, got value here
即使我尝试使用非参数化的 create 方法,该调用也应归结为与使用 new 相同的结果:
a = Rx.Subject.create();
我仍然无法强制它发出值。
我知道主题被设计为接收来自外部世界的值(而不是在内部将它们生成为 Observables),因此主题应由外部代码触发subject.next('value')
,但我只是好奇,如果它们与 Observables 严格相关,背后的逻辑create
并且进一步的行为应该是相同的......
谁能解释一下,为什么create
on的使用Subject
(即使它们不是设计为以这种方式工作,但仍然有可能)不能按预期工作?
解决方案
推荐阅读
- java - LibGDX 浮动与相机位置导致黑线与平铺地图
- java - 检查下一个要保存的输入是否在这些范围内
- class - fortran中的多态性
- android - 在 Android 生命周期中我应该在哪里使用 getIntent()
- python - if 函数的迭代器返回错误
- rust - 有没有办法在 Option 中拆分变量而不必使用 if 语句?
- vb.net - 如何使字符串表达式变量
- python-3.x - “PythonAccumulatorV2 不存在” - 在 Jupyter Notebook 中运行 SparkContext() 时
- python - ValueError:找到具有 0 个样本 (s) 的数组(形状 = (0, 1),而 MinMaxScaler 要求最小值为 1
- bash - 从 spring-boot 项目中获取 API 端点的 Bash 脚本