Angular 2 HTTP属性重试当Observable <any>类型不存在时

时间:2017-06-05 19:21:47

标签: angular rxjs observable

我正在尝试重试我的请求,以便在发送用户再次登录之前我可以获得刷新令牌,但是当我尝试在请求中使用retryWhen时我收到错误并且我正在尝试我不知道为什么。

http.service.ts

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Http, Headers, RequestOptions, Response } from '@angular/http';

@Injectable()
export class HttpService {

  constructor(
    private http: Http
  ) { }

  public get(url: string, headers?: Headers): Observable<any> {
    return this.http.get(url, this.getHeaders(headers))
      .map(this.extractData)
      .retryWhen((error: any) => { ... }) // [ts] Property 'retryWhen' does not exist on type 'Observable<any>'.
      .catch(this.handleError);
  }
}

2 个答案:

答案 0 :(得分:10)

在使用之前,您必须先导入运算符(对其他运算符的运行方式相同)

将它放在文件顶部的导入中:

import 'rxjs/add/operator/retryWhen';

它将此运算符添加到Observable原型的顶部。

答案 1 :(得分:1)

使用它几天之后,Omri发布的原始解决方案引起了一些偶然发现财产的问题。 (它在某些版本中有效,而在其他版本中无效)。我最终找到了一个更加一致的更好的解决方案,并且不需要额外的导入。

而不是从rxjs / Observable导入Observable,而不是从rxjs / Rx导入它。

不会工作:

import { Observable } from 'rxjs/Observable';

DOES 工作:

import { Observable } from 'rxjs/Rx';