【发布时间】:2019-12-07 07:34:51
【问题描述】:
我的 Angular 应用程序中有一个 HTTP 拦截器,如果调用某个端点而不是实际访问服务器,我想简单地返回模拟数据。
我的可观察代码似乎存在问题,因为我没有收到任何错误,但 .subscribe 函数未执行。我不太确定会发生什么,因为我没有收到任何错误。
HttpInterceptor
import {Injectable} from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor
} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';
import {DemoHttpServer} from './demo-http-server';
@Injectable()
export class DemoHttpInterceptor implements HttpInterceptor {
constructor(private demoHttpServer: DemoHttpServer) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (request.url.startsWith('https://demo.company.com/api/')) {
return this.demoHttpServer.handle(request);
}
return next.handle(request);
}
}
演示 HTTP 服务器
handle(req: HttpRequest<any>): Observable<any> {
const result = {isMock: true};
return Observable.create((observer: Subscriber<any>) => {
observer.next(result);
observer.complete();
});
}
在我的组件中
http.get('https://demo.company.com/api/counts')
.subscribe(data => {
// never get in here..., don't get any console errors
})
【问题讨论】:
-
另外,您使用的是哪个版本的 RxJS?当前的导入应该是这样的:
import {Observable} from 'rxjs'; -
在进一步研究这一点时,observer.next 期望的是一个 Observable
,而不是一个简单的对象。看到这个:dev.to/sanidz/…
标签: angular observable angular-http-interceptors