ほとんどすべてのREST要求でユーザーIDが必要です。
ユーザーにログインすると、トークンをローカル記憶域に渡し、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()とユーザー Idが定義されている場合、私は確認してください。もしこのデータで応答が定義されていれば、私はこのデータをgetUser()関数から取得します。
私は1つの問題を解決できません。この要求は非同期で、たとえば "task"サービスはuserIdの値を未定義として設定します。この新しい値を待つことはありません。
どのようにこの問題を管理できますか?
--- EDIT
レンタルが要求される - それは、応答を待つdoens't。
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"でフレームにeverythinkをロードできますが、この場合は良い解決策ではありません。 –