Javascript 如何切换贴图-发射包含原始和新可观察对象的对象?

Javascript 如何切换贴图-发射包含原始和新可观察对象的对象?,javascript,typescript,rxjs,Javascript,Typescript,Rxjs,我想创建一个observable,它首先从异步函数中获取一个值,然后使用该值异步获取另一个值,并发出一个包含这两个值的对象 比如: function getValue1(){ // asynchronously... return Observable.of(value1); } function getValue2UsingValue1(value1){ // asynchronously... // value1 is needed to get value

我想创建一个observable,它首先从异步函数中获取一个值,然后使用该值异步获取另一个值,并发出一个包含这两个值的对象

比如:

function getValue1(){
    // asynchronously...
    return Observable.of(value1);
}

function getValue2UsingValue1(value1){
    // asynchronously...
    // value1 is needed to get value2...
    return Observable.of(value2);
}

getValue1()
    .switchMap(value1=> getValue2UsingValue1(value1))
    //...
    // I want to get an observable that emits an object containing value1 
    // and value2: {value1: value1, value2: value2}
非常感谢您的帮助。

我想您可以:

var value1Cached = getValue1().publishReplay(1);
value1Cached.connect();
var value2 = value1Cached.concatMap(value1 => getValue2UsingValue1(value1));

Observable.forkJoin(value1Cached, value2)
    .map(values => {
        return {'value1': values[0], 'value2': values[1]};
    })
    .subscribe(val => console.log(val));
我正在使用
publishReplay()
操作符将此可观察对象转换为
ConnectableObservable
,其中包含
ReplaySubject
,以支持缓存。我想您不想调用
getValue1()
两次

然后
forkJoin()

见现场演示:

这将打印到控制台:

[object Object] {
  value1: "value1",
  value2: "value2"
}

这真令人困惑。使用Value1()获取值2的
是什么?什么意思是“我不想为了得到value2而订阅原始的observable”?你能在plnkr或JSFIDLE上做一个演示吗?我编辑了这个问题,希望现在更清楚