仅当第一个Observable返回null时,如何调用第二个observable

时间:2016-12-06 13:37:04

标签: angular typescript observable

假设我有两个方法可以返回一个可观察的

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可以很容易地处理它。

1 个答案:

答案 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