我最近开始学习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
答案 0 :(得分:1)
当将延迟和间隔链接在一起时,我会假设每个值将在(间隔+延迟)
之后发出
假设是错误的。间隔开始,一秒后发出0
。延迟然后等待另一秒,但是Interval不会停止,所以,在总共2秒后,当Delay发出0
时,Interval立即准备发出1
,延迟需要一秒然后发出1
,2
立即就绪,所以你得到一个2s的初始延迟,然后每秒得到一个值:
这正是你的jsbin产生的。