2017-05-17 71 views
0

我最近开始学习RxJS。我正在尝试一下,发现了以下问题。链接接收间隔和延迟

当链接在一起的延迟和时间间隔我会假设每个值将在(间隔+延迟)之后发射,但在这里不是这种情况。更令我感到奇怪的是,当这两个funcs链接在一起时,一些值会同时打印出来,不会有任何延迟。我应该怎么理解它?我错过了什么?

我使用RxJS 5.0.3和我在jsbin工作:https://jsbin.com/xoyuded/edit?js,console

这一个:

Rx.Observable.interval(1000).take(10).subscribe(x => console.log(x)); 

给出:

21:16:28.335 runner-4.0.2.min.js:1 Console was cleared 
21:16:29.757 runner-4.0.2.min.js:1 0 
21:16:30.756 runner-4.0.2.min.js:1 1 
21:16:31.756 runner-4.0.2.min.js:1 2 
21:16:32.756 runner-4.0.2.min.js:1 3 
21:16:33.756 runner-4.0.2.min.js:1 4 
21:16:34.751 runner-4.0.2.min.js:1 5 
21:16:35.755 runner-4.0.2.min.js:1 6 
21:16:36.751 runner-4.0.2.min.js:1 7 
21:16:37.751 runner-4.0.2.min.js:1 8 
21:16:38.751 runner-4.0.2.min.js:1 9 

这一个:

Rx.Observable.interval(1000).take(10).delay(1000).subscribe(x => console.log(x)); 

g艾夫斯:

runner-4.0.2.min.js:1 Console was cleared 
21:17:42.749 runner-4.0.2.min.js:1 0 
21:17:42.750 runner-4.0.2.min.js:1 1 
21:17:43.752 runner-4.0.2.min.js:1 2 
21:17:44.753 runner-4.0.2.min.js:1 3 
21:17:45.753 runner-4.0.2.min.js:1 4 
21:17:47.751 runner-4.0.2.min.js:1 5 
21:17:47.752 runner-4.0.2.min.js:1 6 
21:17:49.748 runner-4.0.2.min.js:1 7 
21:17:49.749 runner-4.0.2.min.js:1 8 
21:17:51.748 runner-4.0.2.min.js:1 9 
+0

使用RxJS版本和您发布的代码,我没有看到您描述的行为。与您的控制台输出相反,使用第二个代码段的repro发出的值相隔一秒,第一个值在订阅后两秒发出。 – cartant

+0

感谢您抽出时间@cartant。我不确定这里有什么问题。也许在定时器工作方面有些不一致? –

+0

你可以发布jsbin吗? – morganfree

回答

1

当串联起来延迟和间隔I将假定每个值将(间隔+延迟)之后被发射

的假设是错误的。间隔开始并在一秒后发出0。延迟然后等待另一秒但Interval不停止因此,在总共2秒后,当Delay发出0时,间隔立即准备发出1,延迟需要一秒然后发出1,并且2立即准备好了,这样就可以获得一个初始延迟2秒然后一个值每秒:

  • “2S 0”
  • “3S 1”
  • “4S 2”
  • “5S 3”
  • “6S 4”
  • 等...

,这是你jsbin生产什么。

+0

谢谢@Federico。这解释了第一部分。现在我看到它们如何工作(间隔+延迟)。我仍然缺少的是我不知道为什么有些数字(例如5,6)同时打印(请参阅附带问题的日志)。不幸的是,我现在无法在jsbin中重现它。 –

+0

这是不可能解释的行为之一不能再现:)也许这是一个暂时的问题。 –