私は機能CanActivate(に問題がある)は、関数の応答を受信しない、どのように私はこの問題を解決することができますか?2角度 - 常にundefinedを返しますverifytoken変数<strong>トークン</strong>あるCanActivate未定義値
private verifytoken()
{
if(this._functionservice.getCookie("Cookie") != '' && this._functionservice.getCookie("Cookie") != "undefined")
{
// 1 - You are returning nothing here, only inside the subscriptions. So, you wont be able to get any data if you get inside this if statement
this._symfonyservice.validtoken().subscribe(
data => {this.resut = data;
if(this.resut['is_valid']==true)
{
console.log('true');
return true;
}
else
{
this._functionservice.deleteCookie("Cookie");
console.log('false');
this.router.navigate(['login']);
return false;
}
},
error =>{
alert("Sessão Expirada");
this._functionservice.deleteCookie("Cookie");
console.log('false');
this.router.navigate(['login']);
return false;
}
);
}
else{
// 2 - you are navigating to another place, so you wont be able to get any data from here
this.router.navigate(['login']);
return false;
}
}
canActivate() {
let token = this.verifytoken();
console.log(token);
return token;
}
だから、あなたはif文の内部でサブスクリプションを返すために持っているか、あなたは文句を言わない任意のデータを取得することができ:
コードは
private verifytoken()
{
if(this._functionservice.getCookie("Cookie") != '' && this._functionservice.getCookie("Cookie") != "undefined")
{
this._symfonyservice.validtoken().subscribe(
data => {this.resut = data;
if(this.resut['is_valid']==true)
{
console.log('true');
return true;
}
else
{
this._functionservice.deleteCookie("Cookie");
console.log('false');
this.router.navigate(['login']);
return false;
}
},
error =>{
alert("Sessão Expirada");
this._functionservice.deleteCookie("Cookie");
console.log('false');
this.router.navigate(['login']);
return false;
}
);
}
else{
this.router.navigate(['login']);
return false;
}
}
canActivate() {
let token = this.verifytoken();
console.log(token);
return token;
}
それを返すことができますので、promisseがトリガされ、応答がトークン変数に代入されたときを検出するためにしばらく置いてあるので、どのように私は待つことができますレスポンスを返してからtrueを返しますか? – user26776
私はあなたにこれを行う方法のアイデアを与えるために私の答えを編集しました。 – vinagreti