Bacon.jsで後続のアキュムレータをスキップする方法について


Bacon.jsでアキュームレータ関数を複数設定し、関数の結果しだいで後続の関数をスキップすることはできるのでしょうか？

[code]

    let bus = new Bacon.Bus();
    bus.map(accume1)  // ここの処理によってはaccume2をスキップしてaccume3の処理を行いたい
       .map(accume2)
       .map(accume3);
    bus.push(1);
    
[/code]

どういう風にすればできるのか。  
また、そもそもアキュームレータで分岐をさせたいというのはBacon.js的に正しいことなのか教えてください。

よろしくお願いいたします。




フロー制御には、[observable.takeWhile(property)](https://github.com/baconjs/bacon.js/#observable-
takewhile) もしくは、
[observable.flatMap(f)](https://github.com/baconjs/bacon.js/#observable-
flatmap) が使えます。 `flatMap`
を使うことになると思いますが、「スキップして実行させる」というよりも、「途中で、以降に通すストリームを定義する」形になります。

[code]

    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    
    $("#source").text(arr.join(', '));
    
    $("#run").click(function() {
        var stream = Bacon.sequentially(250, arr);
        var acc_power = function(x) {
            return x*x;
        };
        var acc_1k = function(x) {
            return x + 1000;
        };
        $("#result").text("");
        stream
            .takeWhile( function(x){ return x <= 8; }) // この時点の x が 8 より大きければスキップ
            .map( acc_power)
            .flatMap(function(x) {
                // この時点の x で処理を分ける
                return (x > 30) ? Bacon.once(x).map(acc_1k) : x;
            })
        .onValue(function(val) {
                $("#result").append(val + ", ");
            });
    });
[/code]

[code]

    <script src="//cdnjs.cloudflare.com/ajax/libs/bacon.js/0.7.49/Bacon.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <h3>Source</h3>
    <p id="source"></p>
    <hr/>
    <button id="run">Run</button><hr/>
    <h3>Result</h3>
    <p id="result"></p>
[/code]




フロー制御には、[observable.takeWhile(property)](https://github.com/baconjs/bacon.js/#observable-
takewhile) もしくは、
[observable.flatMap(f)](https://github.com/baconjs/bacon.js/#observable-
flatmap) が使えます。 `flatMap`
を使うことになると思いますが、「スキップして実行させる」というよりも、「途中で、以降に通すストリームを定義する」形になります。

[code]

    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    
    $("#source").text(arr.join(', '));
    
    $("#run").click(function() {
        var stream = Bacon.sequentially(250, arr);
        var acc_power = function(x) {
            return x*x;
        };
        var acc_1k = function(x) {
            return x + 1000;
        };
        $("#result").text("");
        stream
            .takeWhile( function(x){ return x <= 8; }) // この時点の x が 8 より大きければスキップ
            .map( acc_power)
            .flatMap(function(x) {
                // この時点の x で処理を分ける
                return (x > 30) ? Bacon.once(x).map(acc_1k) : x;
            })
        .onValue(function(val) {
                $("#result").append(val + ", ");
            });
    });
[/code]

[code]

    <script src="//cdnjs.cloudflare.com/ajax/libs/bacon.js/0.7.49/Bacon.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <h3>Source</h3>
    <p id="source"></p>
    <hr/>
    <button id="run">Run</button><hr/>
    <h3>Result</h3>
    <p id="result"></p>
[/code]

