完全回调的RxJS未使用mergeMap执行

时间:2017-05-09 13:53:40

标签: reactive-programming observable rxjs5

我想知道为什么示例中的onComplete回调永远不会被执行。下一个回调按预期执行。如果我在foo创建的observable中抛出一个错误,那么错误回调也会被执行。只有完整的回调不会被执行。

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返回的Observable时,一切都按预期工作。是否无法在与mergeMap,switchMap或concatMap?

相关联的Observable中调用complete

1 个答案:

答案 0 :(得分:0)

因为未完成点击$ observable。使用take(1)或其他东西来完成它。

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