我在学习角和RxJS。读了一本叫做“行动中的RxJS”的书,我看到两个运营商都提到了。第一个接收并可观察为一个参数,第二个接收一个选择器函数。基于这些参数,两种缓冲区内容似乎都是基于这些参数。
他们之间有什么区别?什么时候应该使用缓冲区而不是bufferWhen操作符?
发布于 2020-04-03 03:54:08
buffer订阅了它的参数一次,该订阅发出的每一次发出信号表示当前缓冲区关闭并发出信号,然后重新启动缓冲区。
bufferWhen的参数是一个返回可观察的函数。bufferWhen立即调用它并订阅结果,等待发出信号表示缓冲区关闭。关键的是,第一次发射将是唯一重要的,因为在这种情况下,缓冲区关闭,订阅信号可观测的结束,并在这一段中的步骤重复,直到可观察的缓冲完成。
这什么时候有用?有时,当缓冲一个可观察到的,你可能需要做一些设置,然后你才能在正确的时间发射信号。这个设置可能涉及生成一些初始值,可能是基于当前的“世界状态”,或者是随机生成的。在本文撰写之时,Rx文档 for bufferWhen描述了一个对计时器进行缓冲的示例,该定时器每次持续不同的随机持续时间。
增编:要可视化两者之间的差异,可以看到使用buffer实现的bufferWhen
const myBufferWhen = fn => buffer(
defer(fn).pipe(
take(1),
repeat()
)
);https://stackoverflow.com/questions/61003061
复制相似问题