2016-10-20 8 views
8

Observable.forkJoin을 사용하려하고 있으며 subscribe 처리기가 결코 적중하지 않습니다. forkJoin 연산자는 내 응용 프로그램의 다른 부분에서 나를 위해 일하고 있으며 내가 작동하지 않는 시나리오에서 생각할 수있는 유일한 차이점은 asObservable() 함수를 사용하는 BehaviorSubject 개체에서 관찰 가능 객체가 생성된다는 것입니다.BehaviorSubject에서 생성 된 Angular 2 rxjs observables가 forkJoin과 작동하지 않습니다.

이 가입이

let obs = Observable.of(1); 

    Observable.forkJoin(
     obs 
    ).subscribe(data => { 
     console.log(data); 
    }); 

을 당한다이 사람은 내가 처음에 forkJoin을 사용하고 있습니다 이유입니다 이상의 obseravble가 내 실제 사용 사례에 당연하지

let bs = new BehaviorSubject<number>(1); 
    let obs = bs.asObservable(); 

    Observable.forkJoin(
     obs 
    ).subscribe(data => { 
     console.log(data); 
    }); 

을한다 장소.

BehaviorSubject를 forkJoin과 함께 사용하려면 다른 작업이 필요합니까?

UPDATE :

가 RxJs의 문서를 조사 후 조금 더 나는 Observable.combineLatest 훨씬 더 적합 forkJoin보다는 나의 필요성 것을 깨달았다 ... 링크는 여기 경우에 어떤이 SO 포스트를 통해 제공 : http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-combineLatest

답변

6

forkJoin은 관찰 대상을 완료 할 때 관찰 대상을 조인합니다.

첫 번째 코드 단편에서는 of을 사용하여 관찰 가능 목록을 만듭니다. subscribe에 즉시 값을 내 보낸 다음 완료합니다.

두 번째 스 니펫에서 BehaviorSubject이 완료되지 않습니다. 응답에 대한

let bs = new BehaviorSubject<number>(1); 
let obs = bs.asObservable(); 

Observable.forkJoin(
    obs 
).subscribe(data => { 
    console.log(data); 
}); 

bs.complete(); 
+3

감사합니다 : 당신이 complete를 호출한다면, 당신은 콘솔에 기록 된 값을 볼 것입니다. RxJs 문서를 조사한 후에는 Observable.combineLatest가'forkJoin'보다 훨씬 더 적합하다는 것을 깨달았습니다. 어떤 경우이 링크를 통해 링크가 제공됩니다 : http://reactivex.io/ rxjs/class/es6/Observable.js ~ Observable.html # static-method-combineLatest – cboston

관련 문제