rxjs - 如何缓冲 observable何时计数或最大时间避免发出空数组?
问题描述
我需要显示来自后端的最近 5 项。我应该缓冲 observable 的最后 10 个项目,但 observable 可能只有 0..4 个项目并且永远不会缓冲,所以我需要 2000 毫秒的最大时间。问题是我测试过的:bufferTime(2000, null, 5)
但这会发出空数组。如何避免 observable 发出空数组?缓冲区应始终保存最后 10 个项目,并且仅在添加新项目时才发出新缓冲区。
// [A,B,C] - after 2s, buffer -> [A,B,C]
// [A,B,C] - after 2s, buffer -> [] --> AVOID THIS
// [A,B,C] - after 2s, buffer -> [] --> AVOID THIS
// [A,B,C,D,E] - after count 5, buffer -> [A,B,C,D,E]
// [A,B,C,D,E,F] - after count 5, buffer -> [B,C,D,E,F]
http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-bufferTime
解决方案
您可以filter
在应用运算符后清空数组bufferTime
。就像是:
myObservable$.pipe(
bufferTime(2000, null, 5),
filter(items => items.length > 0)
)
推荐阅读
- vb.net - 如何进行循环以查找匹配的字符串
- azure - 有没有办法在任务运行时(在完成之前)从 Azue Batch 任务中动态流式传输数据
- c# - 使用模型等待多个调用
- javascript - 使用 Javascript 和 Acrobat DC 在 PDF 中提取超过 49 页时出错
- python - 模块之间的相对导入
- javascript - 在 ES6 JavaScript 模块中操作 DOM
- firebase - Firebase 如何计算字段的存储空间?Fireabase 存储报告过度使用
- svg - 注释连接器阻止工具提示
- sql - 根据日期分组和重命名
- excel - 将数据从一个工作簿复制到另一个工作簿无数次