链接Rx间隔和延迟

时间:2017-05-17 19:31:21

标签: rxjs rxjs5

我最近开始学习RxJS。我正在尝试一下,遇到了以下问题。

当将延迟和间隔链接在一起时,我会假设每个值将在(间隔+延迟)之后发出,但这不是这里的情况。对我来说更奇怪的是,当这两个函数被链接时,一些值会同时打印而没有任何延迟。我该怎么理解呢?我错过了什么?

我正在使用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));

给出:

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

1 个答案:

答案 0 :(得分:1)

  

当将延迟和间隔链接在一起时,我会假设每个值将在(间隔+延迟)

之后发出

假设是错误的。间隔开始,一秒后发出0。延迟然后等待另一秒,但是Interval不会停止,所以,在总共2秒后,当Delay发出0时,Interval立即准备发出1 ,延迟需要一秒然后发出12立即就绪,所以你得到一个2s的初始延迟,然后每秒得到一个值:

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

这正是你的jsbin产生的。