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);
}