我有一个代码,我试图将一个主题连接到一个可观察的区间?让我在这里发布代码 -
# CODE 1 #
const subject = new Subject();
// Connect the subject to the observable
interval(1000).subscribe(subject); //**Line 1**
subject.subscribe((value: any) => {
console.log(`Subscriber A: Value: ${value}`);
});
setTimeout(() => {
subject.subscribe((value: any) => {
console.log(`Subscriber B: Value: ${value}`);
});
}, 3000);
# END OF CODE 1 #
# OUTPUT 1 #
Subscriber A: Value: 0
Subscriber A: Value: 1
Subscriber A: Value: 2
Subscriber A: Value: 3
Subscriber B: Value: 3
Subscriber A: Value: 4
Subscriber B: Value: 4
Subscriber A: Value: 5
Subscriber B: Value: 5
这个输出正是我所期望的。但现在我发布另一个代码。我刚刚更改了将主题与可观察的连接线的位置。
# CODE 2 #
const subject = new Subject();
subject.subscribe((value: any) => {
console.log(`Subscriber A: Value: ${value}`);
});
setTimeout(() => {
subject.subscribe((value: any) => {
console.log(`Subscriber B: Value: ${value}`);
});
}, 3000);
// Connect the subject to the observable
interval(1000).subscribe(subject); //**Line 1**
# END OF CODE 2 #
# OUTPUT OF CODE 2 #
Subscriber A: Value: 0
Subscriber A: Value: 1
Subscriber A: Value: 2
Subscriber B: Value: 2
Subscriber A: Value: 3
Subscriber B: Value: 3
Subscriber A: Value: 4
Subscriber B: Value: 4
Subscriber A: Value: 5
Subscriber B: Value: 5
对于这个输出我有一些疑问。
为什么改变第1行的位置,输出会有差异?
在输出 2 中,为什么订阅者 B 从值 2 开始。难道它不应该像输出 1 一样从值 3 开始吗,因为这两种情况都有 3 秒的延迟?我在这里缺少什么重要的东西。
我尝试了代码 1 和代码 2,并期待输出 1。我对输出 2 有疑问,我想了解这种行为背后的根本原因是什么?
调用代码需要时间,在第一种情况下,
1000
毫秒计时器启动
立即,
Subscriber B
很可能会与第三个值 (2
) 相差几毫秒。
在第二种情况下,首先开始的是
3000
ms,因此它将收到值