2016-07-03 4 views
1

Я хочу проверить, аутентифицирован ли пользователь в угловой 2-мя маршрутизатора canActivate. На самом деле проверка подлинности не является асинхронной, это всего лишь проверка if this.user. Но перед этой проверкой (только один раз, когда пользователь открыл сайт) приложение должно получить данные пользователя с сервера, использующего http.get(). Итак, я хочу вернуть Observable<boolean> объект, который будет проверять if this.user только при использовании данных пользователя, полученных с сервера.Как проверить асинхронно, если пользователь аутентифицирован в маршрутизаторе canActivate guard в угловом 2?

Я попытался это:

import { Injectable } from '@angular/core'; 
import { Observable } from 'rxjs/Observable'; 
import { User } from '../user'; 

@Injectable() 
export class AuthService { 
    private initPromise: Promise<boolean>; 
    private user: User; 

    constructor() { 
     this.initPromise = new Promise(function(resolve, reject) { 
      receiveUserFromServer(function(userData) { 
       if (!userData) return resolve(null); 

       let user = new User(); 
       user.id = userData.id; 
       user.name = userData.name; 

       resolve(user); 
      }); 
     }); 
    } 

    isLoggedIn() { 
     // I don't know how to return Observable<boolean> here 
     // true, if user from receiveUserFromServer is exists 
     // but receiveUserFromServer should execute only once 
    } 
} 

ответ

4

Вы можете использовать функцию fromPromise.

isLoggedIn() { 
    return Observable.fromPromise(this.initPromise); 
} 
Смежные вопросы