【问题标题】:RxJS on complete callback not executed with mergeMap未使用 mergeMap 执行完整回调的 RxJS
【发布时间】:2017-05-09 13:53:39
【问题描述】:

我想知道为什么下面示例中的 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 吗?

【问题讨论】:

    标签: reactive-programming observable rxjs5


    【解决方案1】:

    因为 click$ observable 没有完成。使用 take(1) 或其他东西来完成它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-06
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 2020-03-28
      • 2018-03-09
      相关资源
      最近更新 更多