我对一个场景感到震惊,其中我有 Angular 服务类 (WeatherService),它执行对外部 api 的 REST 调用并在 searchWeather() 函数中获取数据。
我有一个组件 WeatherSearchComponent,它在其模板中有输入字段搜索,其中 keyup 事件绑定到组件中的函数 onSearch()。它基本上是一个 TypeAhead 输入字段。我在类和 onSearch() 函数中定义了一个主题,我正在初始化主题的 next() 函数,如下所示。
天气搜索组件:
private searchStream = new Subject<string>();
onSearch(cityName:string) {
this.searchStream
.next(cityName);
}
constructor(private _weatherService:WeatherService) {
}
ngOnInit() {
this.searchStream
.debounceTime(300)
.distinctUntilChanged()
.switchMap((input:string) => this._weatherService.searchWeatherData(input))
.subscribe(
data => this.data = data
);
}
气象服务:
searchWeatherData(cityName: string): Observable<any> {
return this._http.get('URL')
.map(response => response.json())
.catch(error => {
console.error(error);
return Observable.throw(error.json())
});
}
我面临的问题是,如果 REST 调用失败或返回错误,我会记录它,但是一旦出现错误,Subject searchStream 生命周期就会结束,并且之后它不接受输入。我尝试处理 ngOnInit() 方法中的错误,但它不起作用。
我想知道如何处理这种情况?