以角度4退出承诺的返回值

时间:2017-09-01 02:40:54

标签: javascript angular

如何从promise中返回值并将其包含在全局变量中?

我试图让这个形成,但无济于事。全局变量未定义

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;
    }
}

1 个答案:

答案 0 :(得分:0)

无需if / else。如果promise解决(因此得到了用户),它将转到然后阻止。

看起来this.auth.check()正在返回一个承诺。所以,这应该有效。

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

你的console.log(this._check)语句在promise解析或拒绝之前执行,这就是你未定义的原因。

如果你是新来的承诺。请查看this和/或this

相关问题