本文介绍了未使用mergeMap执行完整回调时的RxJS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道为什么下面示例中的onComplete回调从不执行。如预期的那样执行下一个回调。如果我在foo创建的可观察对象中抛出错误,也会执行错误回调。只有完整的回调不会被执行。

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或linatMap关联的可观察对象中调用Complete吗?

推荐答案

因为单击$Observable未完成。使用Take(%1)或其他内容来完成它。

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

这篇关于未使用mergeMap执行完整回调时的RxJS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-30 23:01