我有两个可观察对象 - 让我们称它们为A和B.我需要按以下顺序执行以下操作:
按此方式调度操作(假设a
是A
发出的最后一个值,dispatch
返回void
)
this.store.dispatch(
new fromStore.LoadItem(a)
);
由于B取决于A的值,因此我不能使用combineLatest
,因为它要求所有可观察者都发出至少一个值。我也不想使用merge
,因为这需要确定值来自哪个可观察对象,而这些不是基元。似乎一个自然的解决方案是combineLatest
的版本,并不要求所有提供的观察者都发出一些东西,但我不确定它是否存在,或者这里是否是正确的解决方案。
我通过单独订阅A和B并在全球范围内存储这些值来让它以一种黑客的方式工作,但它很混乱,我想看看是否有' sa整洁的方法是在一个代码块中完成它。
编辑:尝试Fabricio的回答:
A.mergeMap(a => {
this.store.dispatch(
new fromStore.LoadItem(a)
);
return a
}, (a, b) => {
...
})
我不明白我应该在第一个参数(a => ???
)中返回什么。 B是另一个可观察的,我不能传递A的值,因此a => B(a)
不起作用。发送动作后我会返回a
吗?可观察a
?第二个可观察的B
?在所有这些情况下,我只得到Argument of type '(a: any, b: any) => void' is not assignable to parameter of type 'number'.
答案 0 :(得分:1)
我最终让它像这样工作:
A.mergeMap(a => {
// dispatch action that causes B to eventually emit a value here
return B.map(b => {
// access both results here
});
});
不确定Fabricio的答案是否是这个或类似的东西的简写,但我不能编译他的版本所以这就是我要去的。