我有两个观测值one$和two$;
我只想one$在至少触发两次$时才触发。我认为这本质上是skipUntil操作员。
one$.skipUntil(two$).subscribe()
Run Code Online (Sandbox Code Playgroud)
但是,可以说one$已经解雇而two$没有解雇。我想要一种行为,让流记住one$已触发的行为,并将尽快触发至少一次two$。
干杯
看起来只有当所有源 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)
| 归档时间: |
|
| 查看次数: |
1945 次 |
| 最近记录: |