【问题标题】:How to handle failed http put in Angular4如何处理 Angular4 中的失败 http
【发布时间】:2017-09-29 14:31:53
【问题描述】:

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

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

示例代码sn-ps:

我的组件包含以下代码:

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 对象正常,并且服务正在运行并且没有抛出错误,则此方法可以正常工作。在服务可能失败并返回 500 的情况下,我希望能够在组件中以不同于 200 响应的方式处理此问题。 (例如 - 组件将显示“成功”消息,或将向用户显示“此调用失败”消息以提示他们重试)。

我对 Angular4 很陌生,找不到任何这种处理的例子。提前感谢您的帮助

【问题讨论】:

    标签: angular angular4-httpclient


    【解决方案1】:

    你的handleError 方法有什么作用?

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

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

    Angular 的 http 方法,例如 put 将为您处理代码 - 如果您的服务收到成功代码,它将被转换为已解决的承诺(在经历整个 Observable 阶段之后),否则它'将被转换为 .catch 中被拒绝的消费承诺。

    【讨论】:

    • 这是否有助于阐明您的问题?
    • 啊!谢谢你,当你这样解释时,现在看起来很简单。设法制定出代码来做到这一点......我没有意识到它会自动返回返回的对象(我试图明确地这样做)。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    相关资源
    最近更新 更多