У меня есть следующий код в Angular 6, и мне нужно было бы решить некоторые вложенные наблюдаемые, когда я использую localforage и http request.
myservice.ts:
getRemoteInformation(action: string): Observable<any> {
return this._loginService.getUserData()
.pipe(
concatMap(userData=> {
var parameters = "?IdUser=" + userData.idUser+ "&userCode=" + userData.userCode;
const header = new HttpHeaders().set('Authorization', "Bearer "+userData.token);
return this._http.get(this.url + action + parameters, { headers: header });
}
)
);
}
loginservice.ts:
getUserData()
{
var promiseUserData= localForage.getItem<UserData>("dataUser");
var userData= from(promiseUserData);
return userData.pipe(concatMap(dv=>
{
var expireDate = moment(dv.Expire) ;
var nowDate = moment().subtract(1,'hours');
if(expireDate.isAfter(nowDate))
{
console.log("searching new token");
return this.login(new LoginData(dv.idUser,dv.userCode))
}
else
{
console.log("using local token")
return localForage.getItem<UserData>("dataUser");
}
}));
}
login(data: LoginData): Observable<any> {
let header = new HttpHeaders().set('content-type', 'application/json');
var body;
body = JSON.stringify(data);
console.log(this.url + "/Login/AuthenticateUserAsync");
return this._http.post(this.url + "/Login/AuthenticateUserAsync", body, { headers: header });
}
Когда я вызываю getRemoteInformation () и мне не нужен новый токен, все работает отлично.
Проблема возникает, когда мне нужен новый токен, который запрашивается черезметод login (), и, несмотря на использование concatMap (), метод getRemoteInformation () не ожидает окончания наблюдаемой функции «getUserData ()».
Что заканчивается вызовом http с параметрами «undefined».
Я надеюсь, что смогу получить вашу помощь и извинения за мой плохой английский, спасибо!