rxjs-是否存在类似于等待第一个操作符的情况?
我有两个可观察的rxjs-是否存在类似于等待第一个操作符的情况?,rxjs,observable,Rxjs,Observable,我有两个可观察的1$和2$ 我希望one$仅在至少触发两个$时才触发。我认为这本质上就是skipUntil操作符 one$.skipUntil(two$).subscribe() 但是我们可以说,1$已经开火,而2$没有。我想要一种行为,其中流记住,one$已经启动,并且将在two$启动后至少启动一次 干杯看起来您可以使用zip()操作符,仅当其所有源观测值都发出nth项时,才发出nth项: const one$ = Observable.from(['a1', 'a2', 'a3'], Sc
1$
和2$
我希望one$
仅在至少触发两个$时才触发。我认为这本质上就是skipUntil
操作符
one$.skipUntil(two$).subscribe()
但是我们可以说,1$
已经开火,而2$
没有。我想要一种行为,其中流记住,one$
已经启动,并且将在two$
启动后至少启动一次
干杯看起来您可以使用
zip()
操作符,仅当其所有源观测值都发出n
th项时,才发出n
th项:
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
只是为了模拟异步行为(有关更多信息,请参阅)
这将打印到控制台:
a1
a1
a2
a3
只有当您知道one$
只会发出一次时,这才可以
最后,您可以使用CombineTest()
,它需要所有源观测值至少发射一个项目,然后在任何发射上发射,您可以使用选择器函数忽略2$
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));
我们知道我们只需要两个$中的第一项,其余的可以忽略。这将打印到控制台:
a1
a1
a2
a3
CombineTest做你想做的事。您只需提供投影仪功能:
one$.combineLatest(two$, v1 => v1).subscribe(x => console.log(x));
CombineTest等待,直到所有可观察对象发出至少一个值,然后发出每个可观察对象最后一个值的组合。在您的情况下,您只需要一个可观察值。这就是使用投影仪功能的原因。此投影仪功能接收一个参数中的每个可观察值,并返回将发出的值
请参见CodePen中的示例:
还有,检查一下
而。正是您想要的。在每个可观察对象至少发出一个值之前,此操作符不会发出初始值
combineLatest(([one$, two$])).subscribe(([one, two]) => {
// do what you want with those values (or value one as you wish)
})