如何处理 Angular4 中失败的 http

How to handle failed http put in Angular4

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

我的场景:一个简单的组件将尝试通过使用放置请求调用 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 教程中复制粘贴和改编的,但该教程的深度不足以处理 errors/successes。

API 不是 return 响应主体、对象或任何类型的 DTO,只是 HTTP 状态代码。成功200,出错500。

如果传递的 workStream 对象正常,并且服务 运行 并且不会抛出错误,则此方法工作正常。在服务可能失败且 return 500 的情况下,我希望能够在组件中以不同于 200 响应的方式处理此问题。 (示例 - 该组件将显示一条 "success" 消息,或者将向用户显示一条 "this call failed" 消息以提示他们重试)。

我是 Angular4 的新手,找不到任何此类处理的示例。预先感谢您的帮助

你的 handleError 方法有什么作用?

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

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

Angular 的 http 方法,例如 put 将为您处理代码 - 如果您的服务收到成功代码,它将被转换为已解决的承诺(在通过整个 Observable 阶段),否则它会被转换为在 .catch.

中被拒绝的消费承诺