rxjs嵌套可观察并合并结果
我正在尝试嵌套2个可观察的对象,并订阅它们的两个结果,但我不知道怎么做 我想运行第一个可观察的,在第二个可观察的中使用它的结果,在subscribe函数中得到第一个可观察的结果和第二个结果 我已经做了一个非常简单的例子来说明我想要什么rxjs嵌套可观察并合并结果,rxjs,observable,Rxjs,Observable,我正在尝试嵌套2个可观察的对象,并订阅它们的两个结果,但我不知道怎么做 我想运行第一个可观察的,在第二个可观察的中使用它的结果,在subscribe函数中得到第一个可观察的结果和第二个结果 我已经做了一个非常简单的例子来说明我想要什么 谢谢。有多种方法可以做到这一点。我会选择“联合测试”。 CombineTest接受多个观测值,并且在所有源观测值发出至少一个值时,就开始发出值 let combinedObs = combineLatest([observable1, observable2]);
谢谢。有多种方法可以做到这一点。我会选择“联合测试”。 CombineTest接受多个观测值,并且在所有源观测值发出至少一个值时,就开始发出值
let combinedObs = combineLatest([observable1, observable2]);
combinedObs.subscribe((val1, val2) => {
return val1 * val2
});
更新代码片段时,您只需执行以下操作:
Rx.Observable.of(1)
.map(x=>{
var y = x * 2;
return {x, y};
})
.subscribe(res=>{
console.log(res.x, res.y);
})
或者,如果您打算在地图中使用可观察的:
Rx.Observable.of(1)
.switchMap(x=> {
var y = x * 2;
return Rx.Observable.of({x, y});
})
.subscribe(res=>{
console.log(res.x, res.y);
})
以及使用函数:
function simpleAndDouble$(x) {
var y = x * 2;
return Rx.Observable.of({x, y});
}
var obs1$ = Rx.Observable.of(1)
.switchMap(x=> simpleAndDouble$(x))
.subscribe(res=>{
console.log(res.x, res.y);
})
根据您在评论中的请求更新:
const subscription = Rx.Observable.of(1)
.mergeMap(x =>
Rx.Observable.of(x * 2),
(x, y) => {
console.log(x, y);
})
.subscribe();
更新:
const one$ = Observable.of(1);
const two$ = one$.map(x => x * 2);
const subscription = Observable
.merge(one$, two$)
.map(n => [n])
.reduce((acc, val) => acc.concat(val), [])
.subscribe((a) => {
const [x, y] = a;
console.log('x:', x);
console.log('y:', y);
});
}
我熟悉联合测试操作员。。但那不是我想要的。。我仍然需要一种方法来使用“observed2”中的“observed1”响应,然后将它们都返回……我并不完全理解您的用例。你不能从现有的两个流中创建一个新的流来建立你需要的值吗?所以我必须“手动”返回第二个流中的第一个可观察响应?没有其他方法了?我已经更新了我的响应,以便将两个值放在一个位置。我可以使用subscribe函数来获取x、any、y值,或者只获取合并映射的内部值吗?我已经用一个实际可行的解决方案更新了响应。这是我想要的答案。。如果我们考虑性能问题,合并、映射和减少运算符不会影响它吗?这看起来像是为了得到它而进行的乘法数据集重构。。