angular - 类型 'timeout' 上不存在属性 'Observable<Object>'

标签 angular angular5 angular6 rxjs5 rxjs6

我尝试从 Angular 5 升级到 Angular 6 并收到此错误:

ERROR in src/app/services/http.service.ts(17,14): error TS2339: Property 'timeout' does not exist on type 'Observable'.

我在 http.service.ts 中的代码:

import { throwError as observableThrowError,  Observable } from 'rxjs';
import { Injectable } from '@angular/core';
import { environment } from "environments/environment";
import { AppService } from 'app/app.service';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class HttpService {

    private baseUrl = environment.apiUrl;

    constructor(private http: HttpClient, private appService: AppService) { }

    public get(endpoint: string): Observable<any>{
        return this.http.get(this.baseUrl + endpoint)
            .timeout(this.appService.timeoutInterval)
            .retryWhen(error => error.delay(this.appService.waitInterval)
                .take(this.appService.numberOfRetries)
                .concat(observableThrowError(new Error())))
            .share();
    }
}

我在这里缺少什么?

最佳答案

从 Rxjs 6 开始,您必须添加 .pipe,然后在其中使用任何运算符。

像这样更改您的实现:

import { throwError ,  Observable, timer } from 'rxjs';
import { Injectable } from '@angular/core';
import { environment } from "environments/environment";
import { AppService } from 'app/app.service';
import { HttpClient } from '@angular/common/http';

import { 
  timeout,
  retryWhen,
  take,
  concat,
  share,
  delayWhen
} from 'rxjs/operators';

@Injectable()
export class HttpService {

  private baseUrl = environment.apiUrl;

  constructor(
    private http: HttpClient, 
    private appService: AppService
  ) {}

  public get(endpoint: string): Observable < any > {
    return this.http.get(this.baseUrl + endpoint)
      .pipe(
        timeout(2500),
        retryWhen(errors =>
          errors.pipe(
            delayWhen(val => timer(val * 1000))
          )
        ),
        take(2),
        concat(throwError('This is an error!')),
        share()
      );
  }
}

PS:我冒昧地用我自己的实现更改了您的 AppService. 引用,因为您没有共享您的 AppService 代码。

关于angular - 类型 'timeout' 上不存在属性 'Observable<Object>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52760890/

相关文章:

javascript - Css 和 Javascript 在组件 Angular 6 中不起作用

angular - Angular2中的 'Subscription'类型是什么?

angular - 刷新页面时 CanDeactivateGuard 不起作用

node.js - Angular App 指向本地主机而不是远程服务器进行数据请求

angular5 - yarn 链接,对链接包的更改未反射(reflect)在主机应用程序中

Angular 5 - 如何从 dom 中删除动态添加的组件

Angular 6 i18n 运行时翻译支持

javascript - 嵌套树结构数据生成

arrays - Angular 2 在重新绑定(bind)数组以选择后保留所选值

Angular 6 错误处理 - 如何在模态中显示错误?