如何处理Angular4中失败的http放置

时间:2017-09-29 14:31:53

标签: angular angular4-httpclient

我正在寻找最佳实践指南来处理Angular4中失败的PUT HTTP请求。

我的场景:一个简单的组件将尝试通过调用带有put请求的API来更新记录。

示例代码段:

我的组件包含以下代码:

this.workStreamService.save(this.workStream);

这是在名为workStreamService的服务上调用一个方法,该服务具有以下代码:

save(workStream: WorkStream):  Promise<WorkStream> {
  const url = this.workStreamUrl + '/' + workStream.id;
  return this.http
  .put(url, JSON.stringify(workStream), {headers: this.headers})
  .toPromise()
  .then(() => workStream)
  .catch(this.handleError);
}

代码主要是通过Angular4教程进行复制粘贴和改编,但教程并没有深入到足以处理错误/成功。

API不会返回任何类型的响应正文,对象或DTO,只返回HTTP状态代码。成功200,如果出现问题则500。

如果传递的workStream对象是OK,并且服务正在运行并且不会引发错误,则此方法可以正常工作。在服务可能失败并返回500的情况下,我希望能够在组件中以200响应的方式处理此问题。 (示例 - 组件将显示&#34;成功&#34;消息,或者将向用户显示&#34;此呼叫失败&#34;消息以提示他们再次尝试)。

我对Angular4很新,找不到任何这种处理的例子。在此先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您的handleError方法做了什么?

如果您要么省略此方法,要么重新抛出其中的Promise.reject(),您的错误将逐渐渗透到组件中,并且可以以类似的方式使用:

this.workStreamService.save(this.workStream)
  .then(workstream => // Do something on success)
  .catch(() => // Do something on error);

Angular的http方法(例如put)将为您处理代码 - 如果您的服务收到成功代码,它将被转换为已解决的承诺(经过整个{ {1}}阶段),否则它将被转换为Observable中被拒绝的承诺。