我有两个带有默认值的BehaviorSubjects $A和$B。它们都在使用.next(value)在不同时间使用值进行更新。在后面的代码中,我试图提取如下所示的值
Observable.combineLatest($A, $B)
.take(1)
.map(([$a, $b]) => {
return {
// stuff
}
})
.subscribe(fn)我看到的行为很奇怪。我期望可观察到的对象等待任何一个主体发出一个值,然后给我一个发出的值,我可以将其传递给订阅函数。但它只释放值与$B发出一个新的价值。当$A发布时,它将从$B获取新的值,但是它不会做相反的事情。我做错了什么?
发布于 2018-08-21 13:42:11
当所有源可观测值在combineLatest上至少发出一个项,然后在上发出来自任何可观测源的每个发射时,运算符就会发出。
所以如果你想要的话。$A发出,即使$B没有发出任何东西,您也可以在每个源中添加startWith。在结果数组中,您可以检查哪个索引中填充了一个值,从而判断什么是可以观察到的源。
const a = $A.pipe(startWith(undefined));
const b = $B.pipe(startWith(undefined));
Observable.combineLatest(a, b)
...我想你这么做是因为你想知道哪个源可以首先被观测到。您可以通过使用与merge链接的take(1)来实现同样的效果,而不是startWith,您可以将每个值映射到唯一可区分的值上。
https://stackoverflow.com/questions/51949851
复制相似问题