首页 > 解决方案 > 如何缓冲 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

标签: rxjsangular6

解决方案


您可以filter在应用运算符后清空数组bufferTime。就像是:

myObservable$.pipe(
  bufferTime(2000, null, 5),
  filter(items => items.length > 0)
)

推荐阅读