截断已订阅的可观察量

时间:2015-04-22 12:19:02

标签: javascript rxjs

我有一个订阅者观察到更新ui。

someObservable.forEach(function(item) {
    updateUI(item);
});

我的问题是,在我想忽略一些特定的用户操作之后 来自此流的N个项目,并稍微处理它 不同的(而不是默认的处理程序)。

假设用户执行的操作我知道会生成四个项目 在可观察的,所以我想推迟更新,直到 最后这些项目已经到了。

我正在考虑将此流与“控制”流合并, 并使用groupJoin或其他东西来截断它,但就我而言 可以看到这只适用于时间窗口,而不是计数 项目,甚至是特定的订单。

2 个答案:

答案 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
    });