0

我定义了以下功能:

 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 回调没有被调用。

我完全厌倦了尝试或寻找解决方案,有人可以帮忙吗?

4

1 回答 1

0

http.get() 方法返回一个可观察对象。您不必将结果封装在新的 Observable 中。所以你可以像这样编写你的 get 服务:

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);
}
于 2017-02-17T18:32:16.773 回答