【发布时间】:2018-04-19 19:15:03
【问题描述】:
我有以下功能:
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),然后使用返回Observable<User> 的fetchUserData() 函数获取用户配置文件。我想将此用户配置文件存储在某处,然后返回Observable<boolean>,如图所示。
当然以上返回error TS2322: Type 'Promise<boolean | Observable<boolean>>' is not assignable to type 'Observable<boolean>'. 我完全理解但不知道如何解决。
请注意,我还没有尝试在这里订阅fetchUserData(),我希望isAuthenticated() 的调用者这样做。这通常会发生在 Angular 的 CanActivate Router Guard 中。
【问题讨论】:
-
看起来你有一个
Observable<Observable<…>>,你需要在某个时候变平 -
pipe()调用中的map是什么? -
谢谢,这就是我希望了解的方法!
pipe(map(...))存在是因为fetchUserData()返回一个Observable<User>而我应该返回一个Observable<boolean>。但也因为在返回任何内容之前,我需要存储fetchUserData()返回的user的值——因为我假设将调用isAuthenticated的人将subscribe给它,我希望代码(存储user) 将始终被执行。
标签: angular promise observable