我正在学习 Angular 和 RxJS。在读一本名为《RxJS in action》的书时,我看到提到了这两个运算符。第一个接收和 observable 作为参数,第二个接收选择器函数。看来两者都基于这些参数来缓冲内容。
他们之间有什么区别?我什么时候应该使用缓冲区而不是bufferWhen运算符?
buffer订阅其参数一次,该订阅的每次发射都会向当前缓冲区发出关闭和发射信号,从而重新启动缓冲区。
的参数bufferWhen是一个返回可观察值的函数。bufferWhen调用它并立即订阅结果,等待发出信号以指示其缓冲区关闭。至关重要的是,第一次发射将是唯一重要的,因为在该事件发生时,缓冲区关闭,对信号可观察值的订阅结束,并且重复本段中的步骤,直到我们正在缓冲的可观察值完成。
这什么时候有用?有时,在缓冲可观察量时,您可能需要进行一些设置,然后才能在正确的时间发出信号。此设置可能涉及生成一些初始值,可能基于当前的“世界状态”,或者随机生成。截至撰写本文时,Rx 文档描述bufferWhen了一个在计时器上进行缓冲的示例,该计时器每次持续不同的随机持续时间。
附录:为了可视化两者之间的差异,查看bufferWhen使用以下实现是很有用的buffer:
const myBufferWhen = fn => buffer(
defer(fn).pipe(
take(1),
repeat()
)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1093 次 |
| 最近记录: |