【发布时间】:2019-06-14 15:25:29
【问题描述】:
This article describes the refCount operator 并解释说,为了防止 obervable A 的取消订阅,我们必须将 delay(0) 添加到源 observable 中,以便从 "rxjs/Observable" 导入 { Observable };
const source = Observable.defer(() => Observable.of(
Math.floor(Math.random() * 100)
)).delay(0);
0 总是够用吗?换句话说,传递零是否保证通知将延迟到所有m.subscribe() 语句都运行后,假设它们都在multicast 语句之后立即运行,如下所示:
const m = source.multicast(() => new Subject<number>()).refCount();
m.subscribe(observer("a"));
m.subscribe(observer("b"));
在上述情况下,我们只订阅观察者a 和b。如果我们在多播语句运行delay(0) 之后订阅了一百万个观察者,仍然保证他们都会在第一个源通知发生之前被订阅?
【问题讨论】:
-
我遇到了
delay(0)的问题,它与setTimeout(..., 0)的工作方式不同,原因(我认为..)是默认调度程序使用setInterval(..., 0),它有不同的行为,因为规范说 JS 中允许的最短间隔是 10 毫秒。其中,setTimeout(..., 0)表示在下一个摘要中立即运行。所以它们并不完全相同,但我不确定这是否对你的问题有任何影响。仅供参考。
标签: javascript angular typescript rxjs