我有两个可观察量one$
和two$
;
我希望one$
仅在两个$至少被触发一次时触发。我认为这基本上是skipUntil
运算符。
one$.skipUntil(two$).subscribe()
但是让我们说one$
在two$
没有被解雇时被解雇了。我想要一种行为,其中流记住one$
已经触发,并且只要two$
完成就会至少触发一次。
干杯
答案 0 :(得分:2)
这看起来只有当所有源Observable都发出[1] train-mlogloss:1.259886
[2] train-mlogloss:0.963367
[3] train-mlogloss:0.755535
[4] train-mlogloss:0.601647
[5] train-mlogloss:0.478923
...
项时,才能使用zip()
运算符发出n
项:
n
我只是添加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));
来模拟异步行为(有关详细信息,请参阅combineLatest behaviour in Rxjs 5?)
这将打印到控制台:
Scheduler.async
只有当您知道a1
只会发出一次时才会这样。
最终你可以使用需要所有源Observable的one$
发出至少一个项目,然后发出任何你可以忽略combineLatest()
选择器功能的发射。
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$
答案 1 :(得分:1)
CombineLatest做你想要的。您只需提供投影仪功能:
one$.combineLatest(two$, v1 => v1).subscribe(x => console.log(x));
combineLatest等待直到所有可观察者都发出至少一个值,然后发出每个observable的最后值的组合。在您的情况下,您只需要一个observable的值。这就是使用投影仪功能的原因。此投影机功能接收一个参数中的每个可观察值,并返回将要发出的值。
查看CodePen中的示例:https://codepen.io/sanzante/pen/vjMKwg
答案 2 :(得分:0)
combineLatest 正是您想要的。此运算符在每个可观察对象至少发出一个值之前不会发出初始值。
combineLatest(([one$, two$])).subscribe(([one, two]) => {
// do what you want with those values (or value one as you wish)
})