Rxjs doOnCompleted() 在 take() 之前没有触发
Rxjs doOnCompleted() not firing before a take()
在这段代码中:
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`)
);
我得到输出:
"Item completed: 0"
"all complete"
没有range complete
这是为什么? range()
可观察对象肯定会完成吗?这一点都不火似乎很奇怪。
这是正确的。 Observable Observable.range(0,8)
从 0
开始计数,这就是你得到 "Item completed: 0"
.
的原因
然后 take(1)
运算符仅传递一个值并发送导致取消订阅的完成信号。我想这就是它发生的地方:https://github.com/ReactiveX/rxjs/blob/master/src/Subscriber.ts#L119 and https://github.com/ReactiveX/rxjs/blob/master/src/Subscriber.ts#L143
这就是为什么 range()
从不发出所有值的原因。 RangeObservable
也被认为是 "Cold" 可观察的,因此在至少有一个订阅者之前它不会发出值。
在这段代码中:
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`)
);
我得到输出:
"Item completed: 0"
"all complete"
没有range complete
这是为什么? range()
可观察对象肯定会完成吗?这一点都不火似乎很奇怪。
这是正确的。 Observable Observable.range(0,8)
从 0
开始计数,这就是你得到 "Item completed: 0"
.
然后 take(1)
运算符仅传递一个值并发送导致取消订阅的完成信号。我想这就是它发生的地方:https://github.com/ReactiveX/rxjs/blob/master/src/Subscriber.ts#L119 and https://github.com/ReactiveX/rxjs/blob/master/src/Subscriber.ts#L143
这就是为什么 range()
从不发出所有值的原因。 RangeObservable
也被认为是 "Cold" 可观察的,因此在至少有一个订阅者之前它不会发出值。