我如何等待具有不同返回类型的2个可观察对象?

时间:2016-06-13 03:04:30

标签: rxjs observable

我需要等待2个observable来处理请求,其类型不同,例如。

observable1 = Observable.create((observer: Subscriber<Type1> => ...)

observable2 = Observable.create((observer: Subscriber<Type2> => ...)

如何避免嵌套订阅,例如

observable1.subscribe(result1 => {
    observable2.subscribe(result2 => {
        ...
        <do something with result1 and result2>
        ...
    }
}

我试过

observable1.concat(observable2).subscribe(result => ...)

但这似乎依次从两个观察者中读到。

我正在思考

observable1<???>observable2.subscribe((result1, result2) => ...)

我该怎么做?

1 个答案:

答案 0 :(得分:1)

你是对的:concat将依次从观察者中读取。要“加入”它们(按顺序位置),您需要使用zip

const a$ = Rx.Observable.just(1);
const b$ = Rx.Observable.just(2);

const combined$ = a$.zip(b$, (x, y) => ({ a: x, b: y }));

const subscription = combined$.subscribe(x => console.log(x));

请注意,使用zip时两个流类型不同的事实不会造成任何不便,因为必须提供一个函数才能从两个“压缩”值中生成新值。