【问题标题】:My subscription is not handling errors我的订阅未处理错误
【发布时间】:2017-08-01 05:22:48
【问题描述】:

我订阅了一项服务,我从外部 API 请求图像 URL 并将其存储在共享服务中。

逻辑:
1.清空当前图像数组
2.从API请求图片,并推送到(新清除的)数组(response =>)
3.如果URL返回错误,用默认(占位符)图像填充数组(错误=>)

由于某种原因,尽管存在错误,但仍未处理该错误。 我已经发布了我的组件和错误消息以获取上下文。

组件.ts

  getImages(vehicleID: number, color: string): void {
    this._carConfigService.car.colors.exterior.urls = [];
    this._FAPIService.getImagesForColors(vehicleID, color)
      .subscribe(
        response => {
        response.products[0].productFormats.forEach(pF => {
        this._carConfigService.car.colors.exterior.urls.push(pF.assets[0].url);
        });
      },
        error => {
          this.errorMessage = <any>error;
          if (this._carConfigService.car.colors.exterior.urls.length === 0) {
            this._carConfigService.car.colors.exterior.urls = this._carConfigService.defaultImages;
          }
      });
  }

我收到以下错误:

Failed to load resource: the server responded with a status of 422 ()
EXCEPTION: Response with status: 0  for URL: null
Uncaught Response

【问题讨论】:

  • 您可以使用编写服务的onCatch 方法处理错误,然后在映射后将其抛出,然后您的订阅者将能够处理它
  • @BabarBilal,这可能是我正在寻找的解决方案,您可以发布示例代码 sn-p 以便我将您的答案标记为正确吗?谢谢:)
  • 我来自手机无法发布代码 sn-p 添加了 2 个链接都可以解决您的问题,祝您好运。
  • 请添加您的服务并提出问题

标签: angular angular2-services angular2-components angular2-observables


【解决方案1】:

您需要使用常规的异常处理方法来处理它们

export class TaskService {
    private _url = "api/products/datanew.json";
    constructor(private _http: Http) {
    }
    getTasks(): Observable<any[]> {
        return this._http.get(this._url)
            .map((response: Response) => <any[]>response.json())
            .do(data => console.log("data we got is " + JSON.stringify(data)))
            .catch(this.handleError);

    }
    private handleError(error: Response) {
            console.log(error);
            return Observable.throw(error.json().error || 'Internal Server error');
    }
}

另外,我有一个问题。

  1. 您正在获取数据但没有分配给任何对象?无返回类型

【讨论】:

  • 我正在检索的响应带有许多不必要的属性,因此我遍历对象以仅获取我需要的内容并将其推送到数组中。我已经将它集成到我的服务中,但是,如果我的订阅返回错误响应,我想用默认图像更新我的图像。
  • 这可以在服务本身中轻松处理。你为什么要把事情复杂化?
  • 您能否详细说明该服务如何处理此问题?
  • 您要寻找的确切用例是什么。也许我可以帮助你
猜你喜欢
  • 2017-08-08
  • 1970-01-01
  • 2017-12-26
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2017-11-25
  • 1970-01-01
相关资源
最近更新 更多