Angular解析Rxjs映射和订阅多个API

时间:2017-09-17 14:31:00

标签: angular rxjs angular-routing

应用程序需要首先获取jwt令牌,然后使用令牌,收集门户信息。此代码是用解析器编写的。

此代码出现错误异常:

  

类型'订阅'不能分配给'Observable'

类型

删除Observable<any>后,解析数据在组件中不可用,并在解析完成之前启动组件

@Injectable()
export class PortalLoadingResolverService implements Resolve<any> {
    constructor(
      private authService:AuthService,
      private emiDataService:EmiDataService,
    ) { }

    resolve():Observable<any> {
      return this.authService.getJwtToken()
      .map(res => res.json())
      .subscribe(JwtToken => {
        debugger;
        localStorage.setItem('id_token',JwtToken.token);
        return this.emiDataService.getBasicLoadingDatas();
      });
    }
}

1 个答案:

答案 0 :(得分:1)

你的方法不会在这里返回Observable,这就是Typescript正在大喊大叫的东西。因为一旦您在Observable上应用了订阅方法,它就会返回Subscription的可观察对象。您可以通过使用Observable运算符链接Observable来轻松返回switchMap

resolve():Observable<any> {
  return this.authService.getJwtToken()
  .map(res => res.json())
  .switchMap(JwtToken => {
    localStorage.setItem('id_token',JwtToken.token);
    return this.emiDataService.getBasicLoadingDatas();
  });
}