无法从拦截器订阅数据

时间:2018-10-12 08:00:40

标签: rxjs angular6 interceptor angular-httpclient rxjs6

在我的AppComponent.ts文件中,我使用HttpClient进行了HTTP GET调用。

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 :(得分:2)

您的缓存响应必须为HttpResonse类型,但更确切地说,它必须为HttpEvent类型,其中包括类HttpResponse<T>

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

return of(response);

这是未经测试的,不确定body是否需要为可解析的json字符串才能起作用,因此:body: '{}',但这是您可以尝试的。 :)