未使用 mergeMap 执行完整回调的 RxJS
RxJS on complete callback not executed with mergeMap
我想知道为什么下面示例中的 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 返回的 Observable 时,一切都按预期工作。是否无法在与 mergeMap、switchMap 或 concatMap 关联的 Observable 中调用 complete?
因为 click$ observable 没有完成。使用 take(1) 或其他方法来完成它。
clicks$
.take(1)
.mergeMap(() => foo())
.subscribe(
e => console.log(e),
err => console.error(err),
() => console.info('Completed') //Never gets executed
)
我想知道为什么下面示例中的 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 返回的 Observable 时,一切都按预期工作。是否无法在与 mergeMap、switchMap 或 concatMap 关联的 Observable 中调用 complete?
因为 click$ observable 没有完成。使用 take(1) 或其他方法来完成它。
clicks$
.take(1)
.mergeMap(() => foo())
.subscribe(
e => console.log(e),
err => console.error(err),
() => console.info('Completed') //Never gets executed
)