嵌套的 RXJS 可观察对象

Neasted RXJS Observables

我正在使用 RXJS 6.5.4

在我的打字稿服务中,我有:

isAuthenticated(): Observable<boolean> {
   // request
}
currentUserPromise(): Promise<User> {
   // request the User model and return via Promise.
}

我的第二种方法,我需要验证会话是否通过身份验证,然后请求当前用户并将其转换为另一个Observable来解析当前用户是否是管理员。

我正在尝试这个,但出现错误:

isAdmin(): Observable<boolean> {   
   this.isAuthenticated().pipe(map(authenticated => {
      if (authenticated) {   
          return from(this.currentUserPromise().then(user => user.roles.indexOf('ADMIN') > -1)
      }
      return mapTo(false); // there is no authentication, so no current user and no admin!
   }));
}

这是编译错误:

Type 'Observable<Observable<boolean>>' is not assignable to type 'Observable<boolean>'.
   Type 'Observable<boolean>' is not assignable to type 'boolean'.ts(2322)

如果您需要订阅内部可观察对象,则需要像 switchMap 这样的高阶运算符,map 用于同步数据转换。 mapTo 是一个运算符,不能像您使用它那样使用,使用 of 将值转换为可观察值...您还需要 return 它才能成为已订阅。

isAdmin(): Observable<boolean> {   
   return this.isAuthenticated().pipe(switchMap(authenticated => {
      if (authenticated) {   
          return from(this.currentUserPromise().then(user => user.roles.indexOf('ADMIN') > -1))
      }
      return of(false); // there is no authentication, so no current user and no admin!
   }));
}