【问题标题】:Rxjs doOnCompleted() not firing before a take()Rxjs doOnCompleted() 在 take() 之前没有触发
【发布时间】:2016-12-05 10:13:03
【问题描述】:

在这段代码中:

Rx.Observable.range(0,8)
    .doOnCompleted(() => console.log("range complete"))
    .take(1)
    .subscribe(
        item => console.log(`Item completed: ${item}`),
        error => console.log(`Error: ${error}`),
        () => console.log(`all complete`)
    );

JSBin

我得到了输出:

"Item completed: 0"
"all complete"

没有range complete

这是为什么? range() observable 肯定会完成吗?这根本不触发似乎很奇怪。

【问题讨论】:

    标签: javascript typescript rxjs rxjs5


    【解决方案1】:

    这是正确的。可观察的Observable.range(0,8) 从0 开始计数,这就是你得到"Item completed: 0" 的原因。

    然后take(1) 操作符只传递一个值并发送完成信号导致取消订阅。我认为这就是它发生的地方:https://github.com/ReactiveX/rxjs/blob/master/src/Subscriber.ts#L119 和 https://github.com/ReactiveX/rxjs/blob/master/src/Subscriber.ts#L143

    这就是range() 从不发出所有值的原因。此外,RangeObservable 被视为“冷”可观察对象,因此在至少有一个订阅者之前它不会发出值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多