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)
})