Я хочу вернуть данные из API в угловом преобразователе маршрута, но если в данных API есть какая-либо ошибка из-за устаревшего токена, я бы снова обновил токен и нажал тот же API. Ниже приведен код для него.
import { CommonUtlitiesService } from './../services/commonutilities.service';
import { UserService } from './../services/user.service';
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/delay';
@Injectable()
export class CurrentUserProfileResolver implements Resolve<any> {
constructor(private userservice:UserService,
private commonservice:CommonUtlitiesService) {}
resolve() {
return this.getactiveuserinfo();
}
getactiveuserinfo(maxcount=3){
//get user data
this.userservice.getactiveuseraccountData().subscribe(res => {
console.log(res);
return res;
},
(err) => {
//refresh stale token
this.commonservice.refreshToken().subscribe(res => {
maxcount--;
if (maxcount > 0) {
//again hit The API
this.getactiveuserinfo(maxcount - 1);
}
});
});
}
}
Код службы для userservice выглядит следующим образом:
getactiveuseraccountData(){
return this.http.post(url, dataSend, options)
.map(res => res.json());
}
В моем компоненте я получаю данные как:
let data= this.route.snapshot.data.userdata;
но это не содержит никакого ответа API.
Если я изменю свой код в распознавателе, чтобы напрямую попасть в службу, он работает нормально. Например:
import { CommonUtlitiesService } from './../services/commonutilities.service';
import { UserService } from './../services/user.service';
import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/delay';
@Injectable()
export class CurrentUserProfileResolver implements Resolve<any> {
constructor(private userservice:UserService,
private commonservice:CommonUtlitiesService) {}
resolve() {
//this works fine
return userservice.getactiveuseraccountData()
}
помогите разобраться в проблеме