将Rxjs代码转换为Angular 6和最新的rxjs

Convert Rxjs code to Angular 6 and latest rxjs

场景:

  • Angular的新功能尝试将Angular 2代码迁移到Angular 6中。
  • 知道我如何
    可以用角度6重写以下代码

要在Angular 6中编写的代码:

1
2
3
4
5
6
7
8
9
10
11
12
return this._http.post(this.apiBaseUrl +"/api/login", body, options)
   .timeoutWith(Constant.timeout, Observable.throw(new Error(Constant.timeoutMsg)))
      .map(response => {
            const result = response.json() as LoginResultModel;

            if (result.AccessToken != null) {
                this.setLoginToken(result);
                return result;
            } else {
                return response;
            }
        });


只需使用pipe方法并将timeoutWithmap运算符都作为函数作为其参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { throwError } from 'rxjs';
import { map, timeoutWith } from 'rxjs/operators';

return this._httpClient.post<LoginResultModel>(this.apiBaseUrl +"/api/login", body, options)
  .pipe(
    timeoutWith(Constant.timeout, throwError(new Error(Constant.timeoutMsg))),
    map(result => {
      if (result.AccessToken != null) {
        this.setLoginToken(result);
        return result;
      } else {
        return response;
      }
    })
  );

有关RxJS 6中的可点运算符的更多信息:

https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

注意,我还使用了HttpClientModule,在这里您无需使用response.json()方法,有关此内容的更多信息:

https://angular.io/guide/http