typescript - RXJS Angular - 使用 .subscribe 和 Observable 处理错误
问题描述
我有一个后端 api 来创建新产品。前端 Angular 代码需要调用后端 API。如何使用 ** .subscribe** 进行错误处理。我正在使用HTTPClient并使用Observable并一直在阅读有关 RXJS 如何利用错误处理的信息,
应用程序应将其称为 Observable 和 .subscribe()。
api /create 应该处理成功和失败(错误) - 如果 API 返回 200:它应该打印成功 - 如果 API 返回 400,应该抛出错误
伪代码
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
ID = 'foo';
this.http.post('/api/create', {
productName: this.form.value.productName,
productValue: this.form.value.productValue,
}).subscribe(
resp => this.onSubmitSuccess(resp), err => this.onSubmitFailure(err)
);
private onSubmitSuccess(resp) {
console.log(resp);
this.ID = resp.ID;
this.submitSuccess = true;
this.submitFailed = false;
}
private onSubmitFailure(resp) {
console.log(resp);
this.submitFailed = true;
this.submitSuccess = false;
} ```
解决方案
处理请求错误。这是官方的 Angular 文档
getConfig() {
return this.http.get<Config>(this.configUrl)
.pipe(
catchError(this.handleError)
);
}
private handleError(error: HttpErrorResponse) {
if (error.error instanceof ErrorEvent) {
// A client-side or network error occurred. Handle it accordingly.
console.error('An error occurred:', error.error.message);
} else {
// The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong,
console.error(
`Backend returned code ${error.status}, ` +
`body was: ${error.error}`);
}
// return an observable with a user-facing error message
return throwError(
'Something bad happened; please try again later.');
};
推荐阅读
- python - 记录发出函数和 QT 发出信号之间的名称冲突
- facebook - 一些 Youtube 共享视频在 facebook 中打开在 YT 应用程序中,其他在 FB 网络弹出窗口中打开
- swift - Firebase 动态链接有时无法打开 iOS 应用
- c# - 属性构造函数和字段数据类型
- javascript - 无法在基于 Fuse 的文件系统上打开 MS Word、PDF
- javascript - 我如何在 FlatList React native 中使用 scrollToIndex?
- prolog - Prolog 程序通过 book_title、book_author、book_edition 使用递归搜索书籍
- presto - 从 Presto CLI 连接到 SQL Server 2019
- python - 将MongoDB中的所有文档从字符串修改为列表
- python - How to change opacity of a region in an RGB image (numpy, cv2)