【发布时间】:2018-12-17 18:04:05
【问题描述】:
我有 2 个可观察对象,如果存在,我想从 X 中获取一个值,否则从 Y 中获取它。以下对我有用,但我正在寻找更简洁的模式。
import {of} from 'rxjs';
import {map, mergeMap} from 'rxjs/operators';
import {getX, getY} from './getXY';
// getX(id: string): Observable<X>; // gets an X asyncronously
// getY(id: string): Observable<Y>; // gets a Y asyncronously
let id = "abc";
// get an X, or a Y if not X, that matches the id
getX(id).pipe(mergeMap((x: X) => {
if (x) {
return of(x);
} else {
return getY(id).pipe(map((y: Y) => {
if (y) {
return y;
}
}));
}
})).subscribe((xy: X | Y) => { ... }
在我看来,of(x) 的方向是错误的——也许有一种方法可以有条件地从 getY 中提取 Y,而不需要 of(x)。
理想情况下,我会编写一个 getXY 来完成所有这些并返回一个 Observable
我使用原始示例和卡坦特的答案创建了一个codepen。请注意,当 getX 返回 'x' 时,carant 仍然调用 getY - 这就是我没有将他的答案标记为解决方案的原因。随意分叉并添加您自己的解决方案。
【问题讨论】:
标签: javascript typescript rxjs observable rxjs6