我在Angular 6中有以下代码,当我使用localforage和http请求时,我需要解决一些嵌套的可观察对象。
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调用的结果。
希望我能为我的英语不好而得到您的帮助和歉意,谢谢!