2016-06-16 8 views
0

なぜ観察可能なインスタンスメソッドを連鎖させて機能させる必要があるのですか?変数にオブザーバブルを割り当て、新しいオブザーバブルメソッドを適用すると、新しいメソッドは呼び出されません。RxJS割り当てられた変数の観察可能なメソッド

たとえば、この作品:

var source = Rx.Observable.range(1, 3) 
 
    .map(function (x) { 
 
     return x; 
 
    }) 
 
    .finally(function() { 
 
    console.log("Finally"); 
 
    }); 
 

 
var subscription = source.subscribe(
 
    function (x) { 
 
     console.log('Next: ' + x); 
 
    }, 
 
    function (err) { 
 
     console.log('Error: ' + err); 
 
    }, 
 
    function() { 
 
     console.log('Completed'); 
 
    });
<script src="//cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.28/rx.all.min.js"></script>

しかし、これは最終的には()メソッドを呼び出していません:

var source = Rx.Observable.range(1, 3) 
 
    .map(function (x) { 
 
     return x; 
 
    }); 
 

 
// This is never called 
 
source.finally(function() { 
 
    console.log("Finally"); 
 
}); 
 

 
var subscription = source.subscribe(
 
    function (x) { 
 
     console.log('Next: ' + x); 
 
    }, 
 
    function (err) { 
 
     console.log('Error: ' + err); 
 
    }, 
 
    function() { 
 
     console.log('Completed'); 
 
    });
<script src="//cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.28/rx.all.min.js"></script>

答えて

1

Observaをブリー法では、元の観測値に演算を追加せず、元の観測値を戻してそのラインを通過させます。彼らは実際に新しい観察可能なものを返します。

source.finally()は、ソースobservableにfinally()メソッドを追加しないため、上記の2番目の例は機能しません。代わりに、finally()メソッドを呼び出す新しいobservableを返します。したがって、この例では、source変数にsource.finally()が呼び出されたという知識はありません。例2作品を作るために、我々は次のものが必要です。

var source = Rx.Observable.range(1, 3) 
 
    .map(function (x) { 
 
     return x; 
 
    }); 
 

 
source = source.finally(function() { 
 
    console.log("Finally"); 
 
}); 
 

 
var subscription = source.subscribe(
 
    function (x) { 
 
     console.log('Next: ' + x); 
 
    }, 
 
    function (err) { 
 
     console.log('Error: ' + err); 
 
    }, 
 
    function() { 
 
     console.log('Completed'); 
 
    });
<script src="//cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.28/rx.all.min.js"></script>

関連する問題