我几乎在所有REST请求中都需要用户标识。
当我登录一个用户时,我将令牌传递给本地存储并将ID传递给user.service.ts(通过函数setUserId(userId);)但是当我仅通过令牌对用户进行身份验证时(用户登录但页面为刷新)我尝试从User对象获取userId(通过令牌从REST请求获取用户对象)。
我的这部分代码如下所示:
getUser() {
var authToken = localStorage.getItem('authorization')
if(!this.userPromise){
let headers = new Headers();
headers.append('Content-type', 'application/json');
headers.append('Authorization', authToken);
this.userPromise = this.http.get(
'http://localhost:8080/api/user',
{ headers }
).toPromise()
.then((res) => res.json());
}
return this.userPromise;
};
getUserId(){
var $self = this;
if($self.userId){
return $self.userId;
} else {
$self.getUser().then(function(result){
$self.setUserId(result.id);
console.log(result.id);
return result.id;
});
}
}
当任何请求,要求用户ID我使用getUserId(),我检查,如果用户 标识的定义。如果定义了我对这个数据的回应,但是如果没有 - 我想从getUser()函数获取这个数据。
我无法解决一个问题 - 此请求是异步的,例如“任务”服务设置userId值为undefined - 不等待这个新值。
我该如何解决这个问题?
--- EDIT
录用是请求 - 它好好尝试等待响应;
getUserTasks() {
// return this.userService.getUserId();
var userId = this.userService.getUserId();
return this.http.get(
'http://localhost:8080/api/private/'+userId+'/tasks'
// 'http://localhost:8080/api/private/1/tasks'
)
.toPromise()
.then((res) => res.json());
}
请问您可以提供一个plnker吗? –
你能展示你如何使用模板中的值吗?所以我可以给你最快的方式来实现它。你似乎为一项小任务做了太多工作。 –
在我的模板中,我只有这个: {{data | async}} 我知道 - 我可以加载ng-if =“user.id”的框架中的所有内容,但在这种情况下它不是很好的解决方案。 –