.first() 运算符影响其他订阅
.first() operator affects other subscriptions
示例代码:
const test1$ = Rx.Observable.interval(1000)
const test2$ = Rx.Observable.interval(1000)
// This subscription need to get every value continuously
const firstSub = test2$
.do(val => console.log('Service: ', val))
.subscribe()
// This subscription need to get only first value and stop
const secondSub = Rx.Observable.combineLatest(test1$, test2$)
.do(val => console.log('Method: ', val))
.first()
.subscribe()
- 第一次订阅 在应用程序启动后立即开始。
- 第二次订阅 由点击事件启动(因此它可以 运行 几次)。
当我使用 .first()
或 .take(1)
运算符时,不知何故第一个订阅也会受到它的影响,并停止获取值。
如何更改该行为以仍然从第一个订阅中获取值,而仅从第二个订阅中获取一个值并停止?
看起来使用没有任何回调的 .subscribe() 会改变 .first()
运算符的行为。
如果我在 .subscribe()
方法中传递任何 next
回调,.first()
运算符将正常工作。
例如,在secondSub
中更改
.subscribe()
到
.subscribe(test => console.log('Method: ', test))
当您将空 (undefined
) 与 subscribe()
一起使用时,库中目前存在错误。
此问题正在解决:
https://github.com/ReactiveX/rxjs/pull/2238
与此同时,如果您像这样更新代码,一切都会按预期进行。
const test1$ = Rx.Observable.interval(1000)
const test2$ = Rx.Observable.interval(1000)
// This subscription need to get every value continuously
const firstSub = test2$
.do(val => console.log('Service: ', val))
.subscribe({})
// This subscription need to get only first value and stop
const secondSub = Rx.Observable.combineLatest(test1$, test2$)
.do(val => console.log('Method: ', val))
.first()
.subscribe({})
示例代码:
const test1$ = Rx.Observable.interval(1000)
const test2$ = Rx.Observable.interval(1000)
// This subscription need to get every value continuously
const firstSub = test2$
.do(val => console.log('Service: ', val))
.subscribe()
// This subscription need to get only first value and stop
const secondSub = Rx.Observable.combineLatest(test1$, test2$)
.do(val => console.log('Method: ', val))
.first()
.subscribe()
- 第一次订阅 在应用程序启动后立即开始。
- 第二次订阅 由点击事件启动(因此它可以 运行 几次)。
当我使用 .first()
或 .take(1)
运算符时,不知何故第一个订阅也会受到它的影响,并停止获取值。
如何更改该行为以仍然从第一个订阅中获取值,而仅从第二个订阅中获取一个值并停止?
看起来使用没有任何回调的 .subscribe() 会改变 .first()
运算符的行为。
如果我在 .subscribe()
方法中传递任何 next
回调,.first()
运算符将正常工作。
例如,在secondSub
中更改
.subscribe()
到
.subscribe(test => console.log('Method: ', test))
当您将空 (undefined
) 与 subscribe()
一起使用时,库中目前存在错误。
此问题正在解决: https://github.com/ReactiveX/rxjs/pull/2238
与此同时,如果您像这样更新代码,一切都会按预期进行。
const test1$ = Rx.Observable.interval(1000)
const test2$ = Rx.Observable.interval(1000)
// This subscription need to get every value continuously
const firstSub = test2$
.do(val => console.log('Service: ', val))
.subscribe({})
// This subscription need to get only first value and stop
const secondSub = Rx.Observable.combineLatest(test1$, test2$)
.do(val => console.log('Method: ', val))
.first()
.subscribe({})