示例代码:
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)
运算符时,第一次订阅也会受到影响,并停止获取值。
如何更改该行为仍然可以从第一个订阅中获取值,而只从第二个订阅中获取一个值并停止?
答案 0 :(得分:2)
当您对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({})
答案 1 :(得分:0)
使用.subscribe()而不使用任何回调更改.first()
运算符行为。
如果我在next
方法中传递任何.subscribe()
回调,则.first()
运算符将正常运行。
例如,在secondSub
更改
.subscribe()
到
.subscribe(test => console.log('Method: ', test))