【发布时间】:2019-03-18 16:03:53
【问题描述】:
我为我的 HTTP 请求添加了一个拦截器,我必须在其中使用我的用户实例的访问令牌。在我的应用组件中,我初始化了我的用户:
app.component.ts
private async restoreUser(): Promise<UserModel | any> {
// ... some view stuff
return this.userService.restore()
// login instance could be found
.then(async () => {
// ... some view stuff
})
// local storage is empty -> login is necessary
.catch(async () => {
// ... some view stuff
this.subscription = this.networkSrv.getNetworkStatus()
.subscribe((status: ConnectionStatus) => {
if (status === ConnectionStatus.Online) {
// ... some view stuff
} else {
// ... some view stuff
}
});
});
}
http.interceptor.ts
return this.userSrv.user.pipe(
map((user: UserModel) => request.clone(
{setParams: {'access-token': user.accessToken}}
)),
mergeMap(request => next.handle(request))
);
现在我想通过初始化我的应用来发出请求。问题是,用户实例为空,应用程序抛出错误。有没有办法像await -> 这样设置用户实例?
例子:
this.transmissionSrv.restoreQueue().then((projects: ProjectModel[]) => {
this.transmissionSrv.transmitProjects(projects, true).subscribe(console.log);
});
目前,我使用setTimeout-方法,但这不是我应该这样做的方式,对吧?另外,很抱歉使用 Observer 不一致; Ionic 经常使用 Promises(?)
【问题讨论】:
标签: javascript angular ionic-framework rxjs