我有以下功能:
public isAuthenticated(): Observable < boolean > {
return fromPromise(this.renewTokens()
.then(() => {
return this.fetchUserData().pipe(map(user => {
// store the user object somewhere
return user !== null;
}));
})
.catch(error => {
this.ctx.log.error('Token renewal error', error);
return false;
}));
}
我首先尝试续订用户令牌(返回renewTokens()
的函数Promise
)然后使用返回fetchUserData()
的{{1}}函数获取用户配置文件。我想将此用户个人资料存储在某处,然后返回Observable<User>
,如图所示。
当然上面的回复Observable<boolean>
我完全理解,但不知道如何解决。
请注意,我还没有尝试订阅error TS2322: Type 'Promise<boolean | Observable<boolean>>' is not assignable to type 'Observable<boolean>'.
,我希望fetchUserData()
的来电者能够这样做。这通常发生在Angular的CanActivate
Router Guard。
答案 0 :(得分:1)
看起来你只需要压扁内部的Observable(我没有测试过这个,但我希望你能明白这一点):
return fromPromise(this.renewTokens())
.pipe(
concatMap(() => this.fetchUserData()
.pipe(
map(user => {
// store the user object somewhere
return user !== null;
})
);
),
catchError(error => {
this.ctx.log.error('Token renewal error', error);
return of(false);
}),
);