Angular 6-Rxjs-嵌套可观测值

时间:2018-11-22 04:28:28

标签: angular typescript rxjs observable

我在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调用的结果。

希望我能为我的英语不好而得到您的帮助和歉意,谢谢!

0 个答案:

没有答案