2017-05-09 6 views
1

다음 예제에서 onComplete 콜백이 실행되지 않는 이유가 궁금합니다. 다음 콜백은 예상대로 실행됩니다. foo에 의해 생성 된 observable 안에 오류가 발생하면 오류 콜백도 실행됩니다. 전체 콜백 만 실행되지 않습니다.RxJS가 mergeMap과 함께 실행되지 않음

JSBin : 나는 푸에 의해 반환 관찰에 직접 가입하면 예상대로 http://jsbin.com/punoridajo/edit?html,js,console,output

let button = document.getElementById('click-me'); 

let clicks$ = Rx.Observable.fromEvent(button, 'click'); 

let foo =() => new Rx.Observable(observer => { 
    observer.next(1); 
    observer.next(2); 
    observer.next(3); 
    observer.next(4); 
    observer.next(5); 
    console.log('Calling on complete') 
    observer.complete(); 
}) 

clicks$ 
    .mergeMap(() => foo()) 
    .subscribe(
    e => console.log(e), 
    err => console.error(err), 
    () => console.info('Completed') //Never gets executed 
) 

모든 작동합니다. mergeMap, switchMap 또는 concatMap과 관련하여 Observable 내에서 complete를 호출 할 수 있습니까?

답변

0

click $ observable이 완료되지 않았으므로 완료하려면 take (1) 또는 무언가를 사용하십시오.

clicks$ 
.take(1) 
.mergeMap(() => foo()) 
.subscribe(
    e => console.log(e), 
    err => console.error(err), 
() => console.info('Completed') //Never gets executed 
)