Angular 5 chain service observable然后将observable返回到组件

时间:2018-04-04 20:27:00

标签: angularjs rxjs observable

我需要做两次休息。休息呼叫2取决于休息呼叫1.我想在继续之前将每个结果存储在服务中。然后我想将一个observable返回给调用rest call 1的组件,以便组件可以在出现问题时进行订阅。

来自服务的

代码:

login(username: string, password: string): Observable<AuthAccess> {
// rest call 1
return this.getAuthClient()
  .flatMap(res => {
    this.client = res.body;
    // rest call 2
    return this.authenticate(username, password)
      .flatMap(access => {
        this.userAccess = access.body;
        return Observable.of(this.userAccess);
      });
  });

}

我可以正确链接,但是调用它并订阅该调用的组件将显示未定义的响应。任何有关这方面的帮助将不胜感激,因为我无法找到关于这个确切用例的回复。

2 个答案:

答案 0 :(得分:2)

Live working example。 使用map运算符(和lettable operatos sintax),而不是链接一个新的flatMap

login(username: string, password: string): Observable<any> {
      // rest call 1
      return this.getAuthClient()
          .pipe(flatMap(res => {
              this.client = res.body;
              // rest call 2
              return this.authenticate(username, password)
                  .pipe(map(access => {
                      this.userAccess = access.body;
                      return this.userAccess;
                  }));
          }));
  }

答案 1 :(得分:0)

尝试将第一个observable转换为promise

login(username: string, password: string): Observable<AuthAccess> {
// rest call 1
return this.getAuthClient()
  .flatMap(res => {
    this.client = res.body;
 }).toPromise()
.then(function(){
    // rest call 2
    return this.authenticate(username, password)
      .flatMap(access => {
        this.userAccess = access.body;
        return Observable.of(this.userAccess);
      });
  });
}