Angular 4: использование HTTP-перехватчика + ошибка оператора тайм-аута RxJS

Я пытаюсь установить тайм-аут по умолчанию в 10 секунд для каждого HTTP-запроса, который я выполняю с помощью HttpClient. У меня есть перехватчик для добавления некоторых значений в заголовок, и я читал, что для установки тайм-аута вам нужно использовать оператор RxJS timeout, например:

import { Injectable } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpHeaders } from '@angular/common/http';

import { Observable } from 'rxjs/Observable';
import { timeout } from 'rxjs/operators/timeout';

@Injectable()
export class APIInterceptor implements HttpInterceptor {
  constructor() {

  }

  intercept (req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    // NOTE: The following 'authToken' and 'user_id' values are obtained through a global service
    const authReq = req.clone({
      headers: new HttpHeaders ({
        'Content-Type':  'application/json',
        'X_TOKEN_AUTH': authToken,
        'X_IDUSER': user_id
      }) 
    });

    const API_TIMEOUT = 10000;

    //console.log('HEADER: ', authReq)

    return next.handle(authReq).timeout(API_TIMEOUT);   // Set a timeout for the requests
  }
}

Перед добавлением функции тайм-аута все работало нормально, и в заголовки были введены токен аутентификации и идентификатор пользователя. Однако теперь я получаю следующую ошибку:

next.handle (...). timeout не является функцией

Я делаю что-то неправильно? Спасибо!


person Fel    schedule 31.03.2018    source источник


Ответы (1)


Если вы хотите использовать стиль операторов «патч», вам необходимо импортировать его из rxjs/add/operator/*:

import 'rxjs/add/operator/timeout';

Метод 'rxjs/operators/timeout' используется при использовании pipe().

person martin    schedule 31.03.2018
comment
Я использую это, но все равно получаю сообщение об ошибке. ошибка TS2339: свойство timeoutWith не существует для типа Observable ‹HttpEvent ‹any››. - person Muhamamd Omar Muneer; 15.01.2019