这看起来你可以使用 zip() 操作符,只有当它的所有源 Observables 都发出 nth 项目时,它才会发出 nth 项目:
const one$ = Observable.from(['a1', 'a2', 'a3'], Scheduler.async);
const two$ = Observable.from(['b1'], Scheduler.async);
Observable.zip(one$, two$, (v1, v2) => v1)
.subscribe(val => console.log(val));
我添加Scheduler.async 只是为了模拟异步行为(有关更多信息,请参阅combineLatest behaviour in Rxjs 5?)
这将打印到控制台:
a1
只有当你知道one$ 只会发射一次时才可以。
最终,您可以使用combineLatest(),它需要其所有源 Observable 至少发射一个项目,然后在任何发射时发射,您可以使用选择器函数忽略 two$。
const one$ = Observable.from(['a1', 'a2', 'a3'], Scheduler.async);
const two$ = Observable.from(['b1', 'b2'], Scheduler.async);
Observable.combineLatest(one$, two$.take(1), (v1, v2) => v1)
.subscribe(val => console.log(val));
我们知道我们只想要two$中的第一项,其余的可以忽略。
这将打印到控制台:
a1
a2
a3