我需要等待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) => ...)
我该怎么做?
答案 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
时两个流类型不同的事实不会造成任何不便,因为必须提供一个函数才能从两个“压缩”值中生成新值。