Angular 2 Ожидание ответа от сервера

455
05 мая 2017, 18:52

При загрузке приложения происходит проверка куков пользователя, если в них есть токен, делаем запрос и проверяем живой ли этот токен. Если живой то все нормально мы разрешаем идти дальше, а если нет, то отправляем на страницу авторизации. Суть вопроса такова, как заставить приложение ждать ответа от сервера, а только потом выполняться дальше?

// 
 
import { Component, OnInit } from '@angular/core'; 
import { CookieService } from 'ngx-cookie'; 
import { Core } from './shared/core'; 
import { HttpService } from './service/http.service'; 
import { Router } from '@angular/router'; 
@Component({ 
  selector: 'my-app', 
  template: `<router-outlet></router-outlet>`, 
  providers: [HttpService], 
}) 
 
export class AppComponent implements OnInit{ 
   
  constructor(private router: Router, private _cookieService: CookieService, private httpService: HttpService) { 
  } 
   
  ngOnInit(){ 
    alert("Отправили запрос"); 
    if (this._cookieService.get('token')) { 
      this.httpService 
        .chekToken(this._cookieService.get('token')).then(data => { 
        if(data['status']== 1){ 
          Core.id = data['user_id']; 
          Core.token = data['token']; 
          alert("Получили ответ"); 
        } else { 
          this.router.navigate(['/auth']); 
        } 
      }); 
    }else { 
      this.router.navigate(['/auth']); 
    } 
  } 
 
}
Собственно сервис

import {Injectable} from '@angular/core';
import {Http} from '@angular/http';
import {Response, Headers, URLSearchParams} from '@angular/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class HttpService{
  constructor(private http: Http){ }

  postAuth(email:string, password:string){
    var params = new URLSearchParams();
    params.set('email', email);
    params.set('password', password);
    let headers = new Headers({ 'Content-Type' : 'application/x-www-form-urlencoded; application/json;charset=utf-8; charset=UTF-8' });
    return this.http.post('https://url/', params, { headers: headers })
      .map((resp:Response)=>resp.json())
      .catch((error:any) =>{return Observable.throw(error);});
  }
  chekToken(token:string){
    var params = new URLSearchParams();
    params.set('token',token)
    let headers = new Headers({ 'Content-Type' : 'application/x-www-form-urlencoded; application/json;charset=utf-8; charset=UTF-8' });
    return this.http.post('https://url/', params, { headers: headers })
      .map((resp:Response)=>resp.json()).toPromise();
  }
}
READ ALSO
Вопрос по потокам в NodeJS

Вопрос по потокам в NodeJS

Только начал изучать NodeJS, так что сильно тапками не забрасывайтеРазбираюсь с потоками, пытаюсь передать содержимое файла index

205
Координаты из XML

Координаты из XML

Почему при использовании такого кода

256
Именование файлов в Javascript

Именование файлов в Javascript

Каковы правила по именованию файлов в Javascript? Почему некоторые файлы начинаются с большой буквы, а некоторые с маленькой?

305
Symbol.iterator в ES6

Symbol.iterator в ES6

Где-то еще кроме forof и spread применяется кастомный итератор?

211