如何在Angular4中处理失败的http put
我正在寻找在Angular4中处理失败的PUT HTTP请求的最佳实践指南 我的场景:一个简单的组件将尝试通过调用带有put请求的API来更新记录 示例代码段: 我的组件包含以下代码:如何在Angular4中处理失败的http put,angular,angular4-httpclient,Angular,Angular4 Httpclient,我正在寻找在Angular4中处理失败的PUT HTTP请求的最佳实践指南 我的场景:一个简单的组件将尝试通过调用带有put请求的API来更新记录 示例代码段: 我的组件包含以下代码: this.workStreamService.save(this.workStream); save(workStream: WorkStream): Promise<WorkStream> { const url = this.workStreamUrl + '/' + workStream
this.workStreamService.save(this.workStream);
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);
}
这是对名为workStreamService的服务调用方法,该服务具有以下代码:
this.workStreamService.save(this.workStream);
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很陌生,找不到任何这种处理的例子。提前感谢您的帮助您的handleError方法有什么作用
如果您忽略此方法,或在其中重新引用一个Promise.reject,则您的错误将向下渗透到组件,并以类似的方式消耗:
this.workStreamService.save(this.workStream)
.then(workstream => // Do something on success)
.catch(() => // Do something on error);
Angular的http方法(如put)将为您处理代码-如果您的服务收到一个成功的代码,它将在经过整个可观察阶段后转换为已解决的承诺,否则它将转换为在.catch中消费的拒绝承诺。您的handleError方法做什么
如果您忽略此方法,或在其中重新引用一个Promise.reject,则您的错误将向下渗透到组件,并以类似的方式消耗:
this.workStreamService.save(this.workStream)
.then(workstream => // Do something on success)
.catch(() => // Do something on error);
Angular的http方法(如put)将为您处理代码-如果您的服务收到一个成功的代码,它将在经过整个可观察阶段后转换为已解决的承诺,否则它将转换为在.catch中消费的拒绝承诺。这有助于阐明您的问题吗?啊!谢谢你,现在你这样解释似乎很简单。设法找出代码来做这件事。。。我没有意识到它会自动返回我试图显式执行的返回对象。谢谢这有助于阐明你的问题吗?啊!谢谢你,现在你这样解释似乎很简单。设法找出代码来做这件事。。。我没有意识到它会自动返回我试图显式执行的返回对象。谢谢