Ionic 2:如何从创建的 Observable 中获取错误?
Ionic 2: how to get error from created Observable?
我定义了以下函数:
searchProducts(searchText: string){
return Observable.create(observer => {
return this._http.get(this._global.baseUrl + "/products/search/searchProducts?search=" + searchText)
.map(res => res.json())
.subscribe(data => {
observer.next(data);
observer.complete();
},
err => {
return Observable.throw(err); // this statement is called
});
});
}
调用语句如下:
this.productService.searchProducts(this.searchItem)
.subscribe(products => {
console.log(products);
},
err => {
console.log(err); // this statement is not getting called
});
问题:从服务器获取产品时,订阅数据回调被调用,但出现错误(比如网络连接超时或网络错误), err 回调没有被调用。
我已经厌倦了尝试或寻找解决方案,有人可以帮忙吗?
http.get() 方法 return 一个可观察对象。您不必将结果封装在一个新的 Observable 中。
所以你可以像这样写你的获取服务:
searchProducts(text:string): Observable<Array<Product>> {
return this.http.get(this._global.baseUrl + "/products/search/searchProducts?search=" + searchText)
.map(res => res.json())
.catch(this.handleError);
}
然后,处理错误:
protected handleError(error: Response): Observable<any> {
var errorJson = error.json();
if (errorJson) {
console.error(errorJson.message);
return Observable.throw(errorJson.message || error);
}
return Observable.throw(error);
}
我定义了以下函数:
searchProducts(searchText: string){
return Observable.create(observer => {
return this._http.get(this._global.baseUrl + "/products/search/searchProducts?search=" + searchText)
.map(res => res.json())
.subscribe(data => {
observer.next(data);
observer.complete();
},
err => {
return Observable.throw(err); // this statement is called
});
});
}
调用语句如下:
this.productService.searchProducts(this.searchItem)
.subscribe(products => {
console.log(products);
},
err => {
console.log(err); // this statement is not getting called
});
问题:从服务器获取产品时,订阅数据回调被调用,但出现错误(比如网络连接超时或网络错误), err 回调没有被调用。
我已经厌倦了尝试或寻找解决方案,有人可以帮忙吗?
http.get() 方法 return 一个可观察对象。您不必将结果封装在一个新的 Observable 中。 所以你可以像这样写你的获取服务:
searchProducts(text:string): Observable<Array<Product>> {
return this.http.get(this._global.baseUrl + "/products/search/searchProducts?search=" + searchText)
.map(res => res.json())
.catch(this.handleError);
}
然后,处理错误:
protected handleError(error: Response): Observable<any> {
var errorJson = error.json();
if (errorJson) {
console.error(errorJson.message);
return Observable.throw(errorJson.message || error);
}
return Observable.throw(error);
}