Невозможно подписать данные от Interceptor - PullRequest
0 голосов
/ 12 октября 2018

В моем файле AppComponent.ts я сделал HTTP-вызов GET, используя HttpClient.

import { Component } from '@angular/core';
import { Observable, Subscriber, Unsubscribable } from 'rxjs';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'app';
  ob: Observable<any> = null;

  constructor(private httpClient: HttpClient) {

    httpClient.get("").subscribe((response) => {
      console.log(response);
    });
  }
}

Тогда у меня также есть перехватчик, который перехватывает вызов Http и возвращает некоторые статические данные (скажем, кэш для примера).

import { Injectable } from "@angular/core";
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';
import { Observable, of } from "rxjs";

@Injectable()
export class CustomHttpInterceptor implements HttpInterceptor {
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<any> {
        return of({});
    }
}

Однако подписка в AppComponent.tsфайл, не получает ответа.На самом деле, функция подписки на успех или ошибку даже не срабатывает.Также нет ошибок консоли.Кто-нибудь знает, что здесь происходит?

ПРИМЕЧАНИЕ Я изменил тип возвращаемого значения с Observable<HttpEvent<any>> на Observable<any>, поскольку TypeScript не смог преобразовать Observable<{}> в Observable<HttpEvent<any>>.

1 Ответ

0 голосов
/ 12 октября 2018

Ваш кэшированный ответ должен иметь тип HttpResonse, но, если быть более точным, он должен иметь тип HttpEvent, который включает класс HttpResponse<T>:

const response = new HttpResponse<object>({
  body: {},
  status: 200
})

return of(response);

Это довольно непроверено, хотя и не уверен, нужно ли, чтобы body было парсинговой строкой json, чтобы это работало так: body: '{}', но это для вас.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...