首页 > 解决方案 > rxjs 示例运算符问题

问题描述

我目前正在学习 rxjs 并发现示例运算符不是我想要的。这是我的示例代码。

const source = rxjs.interval(500); 
rxjs.interval(300)
    .pipe(
        rxjs.operators.sample(source)
    )
    .pipe(
        rxjs.operators.take(20)
    )
    .subscribe(val => console.log(val));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.6.3/rxjs.umd.min.js"></script>

当代码运行时,得到的结果是

0 2 4 5 7 ...

但是,我希望结果是

0 1 3 5 ...

根据下图推理。

在此处输入图像描述

那么有人可以向我解释一下示例运算符的工作原理以及为什么下面的测试用例会返回0 2 4 5 7 ...吗?

谢谢。

标签: javascriptrxjs

解决方案


问题是第一个(#0)间隔在设定的时间段后发出。它不会在订阅时发出 0 值。

因此,您提供的图像可以正常工作,只是应该跳过第一次发射:

time:            0.    300ms.     600ms.     900ms.    1200ms.    1500ms     

300ms interval         #0         #1         #2        #3.        #4
500ms sample                   #0               #2                #4

一个对时间有更多感觉的例子:https ://jsfiddle.net/8t4r3ev0/33/


推荐阅读