2017-09-01 14 views
0

約束から値を戻してグローバル変数に含めるにはどうすればいいですか?角度4の約束の出口での戻り値

私はこれを形成しようとしていますが、無駄です。グローバル変数は未定義です

import { Injectable } from '@angular/core'; 
import {ActivatedRouteSnapshot, CanActivate, CanLoad, Route, Router, RouterStateSnapshot} from '@angular/router'; 
import { Observable } from 'rxjs/Observable'; 
import { Auth } from '../providers/auth'; 

@Injectable() 
export class AuthGuard implements CanActivate, CanLoad { 

    _check: boolean; 

    constructor(private auth: Auth, private router: Router) { 
     console.log(this.check()); 

    } 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean { 
     return this.check(); 
    } 

    canLoad(Route: Route): Observable<boolean> | boolean { 
     return this.check(); 
    } 


    check() { 

     this.auth.check().then((user) => { 
      if (!user) { 
       this._check = null; 
      }else { 
       this._check = true; 
      } 
     }); 


     console.log(this._check) <---- undefined 
     return this._check; 
    } 
} 

答えて

0

if/elseは必要ありません。約束が解決されると(それによってユーザーが得られる)、ブロックされます。

this.auth.check()が約束を返すようです。だから、これはうまくいくはずです。

this.auth.check() 
      .then((user) => { 
       return true; 
      }, 
      .catch((err){ 
       return false; 
      }); 

そして、あなたはconsole.log(this._check)文が約束berfore実行しているあなたは、未定義になっている理由です、解決または拒否します。

お約束の場合は、 thisおよび/またはthis

+0

こんにちは。 trueまたはfalseを返すにはcheck()関数が必要です。ありがとう –

+0

あなたはブロックでthis._checkを返すことができます。私はちょっと後で私の答えを更新します。 – nightElf91

+0

@ user2716095私は自分の答えを更新しました。それがあなたの解決策に役立った場合は、答えとして選択してください。 – nightElf91