首页 > 解决方案 > Angular 8 - 按顺序调用可观察对象

问题描述

我正在尝试一个接一个地调用几个可观察对象。这是我的代码:

 // service1    
 login(username: string, password: string): any {
  this.service2.firstObservable(username, password)
    .pipe(map(
      data => {
          if (data) {
            return this.service2.secondObservable(data, username, password)
            .subscribe(token => {
              return true;
            });
          }
      },
      error => {
          this.service.error(error);
          return false;
      }
    ));
}

执行:

this.service1.login(this.f.username.value, this.f.password.value)
    .pipe(map(
      data => {
          // Login is successful 
      }
    ));

我得到:

Cannot read property 'pipe' of undefined

显然 service1.login 返回一个错误的值。是否有可能使某些东西起作用?

谢谢

更新 1。

login(username: string, password: string): any {
  return this.service1.firstObservable(username, password)
    .pipe(switchMap(
      data => this.service1.secondObservable(data, username, password)
    ));
}

标签: angularobservable

解决方案


你可以试试 switchMap 来切换 observables,记得在 service1 中返回值:

login(username: string, password: string): any {
  return this.service2.firstObservable(username, password)
    .pipe(
      switchMap(
        data => this.service2.secondObservable(data, username, password)
      ),
      catchError(
        error => {
          this.service.error(error);
          return throw(error); // In case you want to catch it later
        }
      )
    );
} 

之后,第二段代码应该可以工作。


推荐阅读