2017-05-09 16 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 
) 

予想通り、私がfooによって返された観察可能に直接購読するとすべてが動作します。 mergeMap、switchMap、concatMapに関連してObservable内で完全な呼び出しができないのですか?

答えて

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 
) 
関連する問題