2017-09-01 40 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

你好。我需要check()函数来返回true或false。谢谢 –

+0

你可以在块中返回this._check。我会稍后更新我的答案。 – nightElf91

+0

@ user2716095我已更新我的答案。如果它帮助您找到解决方案,请选择它作为答案。 – nightElf91