为什么减少行为与手写链方法不同?

时间:2016-12-22 08:46:47

标签: javascript rxjs observable

我认为Rx.Observable.prototype.reduce就像Array.prototype.reduce所以我就这样编写代码

        function fn(prev, num){
            return Rx.Observable.of(prev+num);
        }

        fn(1, 1).switchMap(res =>fn(res, 2))
                .switchMap(res =>fn(res, 3))
                .subscribe(x=>console.log(x));

        // 7 



        Rx.Observable.from([2,3]).reduce(
            (prev, cur) =>prev.switchMap(res => fn(res, cur)),
            fn(1, 1)
        ).subscribe(x=>console.log(x))

        // SwitchObservable {source: FlatMapObservable}

我想知道为什么我不能以这种方式使用扫描?我怎么能以正确的方式使用运算符?

1 个答案:

答案 0 :(得分:1)

这是因为你的累加器是一个Observable。您可以通过再次调用switchMap来获取您的价值:

<input type="button" id="primaryButton" onclick="ExistingLogic()" />
<input type="button" id="secondaryButton"/>

$('#secondaryButton').click(function(){
    $("#primaryButton").click();
})

修改后

Rx.Observable.from([2,3]).scan(
    (prev, cur) =>prev.switchMap(res => fn(res, cur)),
    fn(1, 1)
).last().switchMap(x => x).subscribe(x=>console.log(x))