2016-12-06 65 views
1

假設我有兩個方法返回一個可觀察如何調用只有第一可觀察返回null

method1(): Observable<any> { 
    returns data or null; 
} 

method2(): Observable<any> { 
always returns data; 
} 

現在,我首先調用方法1,如果這個返回一些數據,那就不叫方法2第二觀察到,否則調用method2。

我可以做這樣的事情,

this.method1().subscribe(data => { 
    if(data == null) 
    this.method2().subscribe(data => { 
     return data; 
    }) 
    else { 
    return data; 
    } 
}) 

但我認爲,這不是處理這種情況的正確方法。它可以很容易地處理與Observable運營商,我失蹤了。

回答

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(); 
    }); 
    } 
} 

實時演示:https://plnkr.co/edit/4G8Yr6OgpRqifWNfLmQN?p=preview