【发布时间】:2019-05-08 08:46:44
【问题描述】:
我需要将来自两个来源的数据组合成一个res: {data1: any, data2: any} 对象,并且我需要实现这一点即使其中一个来源没有发出任何值
这是我期望的结构:
xxx (
source1,
source2,
(data1, data2) => ({data1: data1, data2: data2})
).subscribe(res => {
doSomething1(res.data1)
doSomething2(res.data2)
})
有没有 rxjs 操作符可以做到这一点?
目前我可以通过startWith 和combineLatest 的组合来解决这个问题- 我发出空值,所以combineLatest 可以开始发出值 - 没有startWith(null) 有更好的方法来解决这个问题吗?
combineLatest (
source1.pipe(startWith(null)),
source2.pipe(startWith(null)),
(data1, data2) => ({data1: data1, data2: data2})
).subscribe(res => {
if(res.data1) {
doSomething1(res.data1)
}
if(res.data2) {
doSomething2(res.data2)
}
})
【问题讨论】:
-
any better way to solve this without startWith(null)?不。这就是 combineLatest 的工作原理。你真的需要 combineLatest 吗? -
@ritaj 不,我需要的是至少从一个来源获取价值,如果其他来源已经死了
-
使用
startWith是解决您问题的正常方法。