rxjs嵌套可观察并合并结果

rxjs嵌套可观察并合并结果,rxjs,observable,Rxjs,Observable,我正在尝试嵌套2个可观察的对象,并订阅它们的两个结果,但我不知道怎么做 我想运行第一个可观察的,在第二个可观察的中使用它的结果,在subscribe函数中得到第一个可观察的结果和第二个结果 我已经做了一个非常简单的例子来说明我想要什么 谢谢。有多种方法可以做到这一点。我会选择“联合测试”。 CombineTest接受多个观测值,并且在所有源观测值发出至少一个值时,就开始发出值 let combinedObs = combineLatest([observable1, observable2]);

我正在尝试嵌套2个可观察的对象,并订阅它们的两个结果,但我不知道怎么做

我想运行第一个可观察的,在第二个可观察的中使用它的结果,在subscribe函数中得到第一个可观察的结果和第二个结果

我已经做了一个非常简单的例子来说明我想要什么


谢谢。

有多种方法可以做到这一点。我会选择“联合测试”。 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值,或者只获取合并映射的内部值吗?我已经用一个实际可行的解决方案更新了响应。这是我想要的答案。。如果我们考虑性能问题,合并、映射和减少运算符不会影响它吗?这看起来像是为了得到它而进行的乘法数据集重构。。