假设我有两个方法可以返回一个可观察的
method1(): Observable<any> {
returns data or null;
}
method2(): Observable<any> {
always returns data;
}
现在我首先调用method1,如果这返回一些数据,则不要调用method2,否则调用method2。
我可以做这样的事情,
this.method1().subscribe(data => {
if(data == null)
this.method2().subscribe(data => {
return data;
})
else {
return data;
}
})
但我认为,这不是处理这种情况的正确方法。使用我缺少的Observable Operators可以很容易地处理它。
答案 0 :(得分:1)
不要subscribe
,而是使用flatMap
。
export class App {
name:string;
constructor() {
this.name = 'Angular2'
}
ngOnInit() {
this.method3().subscribe(data => console.log('data', data));
}
method1(): Observable<any> {
return Observable.of(null);
//return Observable.of({ not: null });
}
method2(): Observable<any> {
return Observable.of({ any: 'data' });
}
method3(): Observable<any> {
return this.method1().flatMap(data => {
console.log('m1', data);
if (data) return Observable.of(data);
return this.method2();
});
}
}
live-demo:https://plnkr.co/edit/4G8Yr6OgpRqifWNfLmQN?p=preview