嵌套的 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!
}));
}
我正在使用 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!
}));
}