我有一个订阅者观察到更新ui。
someObservable.forEach(function(item) {
updateUI(item);
});
我的问题是,在我想忽略一些特定的用户操作之后 来自此流的N个项目,并稍微处理它 不同的(而不是默认的处理程序)。
假设用户执行的操作我知道会生成四个项目 在可观察的,所以我想推迟更新,直到 最后这些项目已经到了。
我正在考虑将此流与“控制”流合并, 并使用groupJoin或其他东西来截断它,但就我而言 可以看到这只适用于时间窗口,而不是计数 项目,甚至是特定的订单。
答案 0 :(得分:0)
我在某个地方有一个变量customActivity
,并且大致像这样编写forEach的动作(我的JavaScript知识有限):
customActivity = function(item) {
received++;
handle(item);
if (received == 4) {
customActivity = null;
return true;
}
return false;
}
someObservable.forEach(function(item) {
if (customActivity == null || customActivity(item)) {
updateUI(item);
}
});
答案 1 :(得分:0)
您可以使用take
运算符仅处理前N个值,并skip
处理其中的N个。
someObservable
.take(4)
.forEach(function(item) {
updateUI(item);
});
someObservable
.skip(4)
.forEach(function(item) {
// ... some code
});
假设用户执行的操作我知道会在observable中生成四个项目,所以我想推迟更新,直到最后一个项目到达。
在这种情况下,bufferWithCount
可以胜任。
someObservable
.bufferWithCount(4)
.forEach(function(items) {
// will be called for batch of every 4 items
});