rxjs-是否有等到第一个运算符的等待?

Han*_*Che 5 observable rxjs

我有两个观测值one$two$;

我只想one$在至少触发两次$时才触发。我认为这本质上是skipUntil操作员。

one$.skipUntil(two$).subscribe()
Run Code Online (Sandbox Code Playgroud)

但是,可以说one$已经解雇而two$没有解雇。我想要一种行为,让流记住one$已触发的行为,并将尽快触发至少一次two$

干杯

mar*_*tin 4

看起来只有当所有源 Observables 都发出了 th 项时,您才能使用zip()发出 th 项的运算符:nn

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));
Run Code Online (Sandbox Code Playgroud)

我添加Scheduler.async只是为了模拟异步行为(有关更多信息,请参阅Rxjs 5 中的combineLatest 行为?

这将打印到控制台:

a1
Run Code Online (Sandbox Code Playgroud)

仅当您知道只会发出一次时才可以one$

最终,您可以使用combineLatest()需要其所有源 Observables 来发射至少一项,然后在您可以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));
Run Code Online (Sandbox Code Playgroud)

我们知道我们只想要 中的第一项two$,其余的可以忽略。
这将打印到控制台:

a1
a2
a3
Run Code Online (Sandbox Code Playgroud)