2016-06-16 4 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() 메서드를 추가하지 않기 때문에 위의 두 번째 예제는 작동하지 않습니다. 대신 finally() 메소드를 호출 할 새로운 관찰 가능 객체를 반환합니다. 따라서이 예에서 source 변수는 source.finally()가 호출되었음을 알지 못합니다.

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>

: 예를 들어 두 작업을하려면, 우리는 다음과 같은 필요
관련 문제