如何在计数或最大时间时缓冲 observable<any> 避免发出空数组?

Fra*_*n b 1 rxjs angular6

我需要显示后端最近的 5 项。我应该缓冲 observable 中的最后 10 个项目,但 observable 可能只有 0..4 个项目并且永远不会创建缓冲区,所以我需要 2000ms 的 maxtime。问题是我测试过: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]
Run Code Online (Sandbox Code Playgroud)

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-bufferTime

Ole*_*luk 5

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

myObservable$.pipe(
  bufferTime(2000, null, 5),
  filter(items => items.length > 0)
)
Run Code Online (Sandbox Code Playgroud)