[英]How to return in Angular 8 with Observable and pipe()?
我在 Angular 中使用我自己的数据服务,使用save()
方法,可以在服务器端运行创建或更新。 但是在向服务器发送数据之前,需要检查数据是否有效。
如果数据无效,与服务器的通信将不会发生。
这是代码:
save(data: T): Observable<boolean> {
const preparedData = JSON.stringify(data.prepareToSave());
if (!data.isValid) {
// if data is invalid we should return before send datas to server
return new Observable<T>().pipe(map(() => false));
}
if (!data.id) {
// create
return this.http.post(this.url, preparedData, this.options)
.pipe(map(() => true));
} else {
// update
return this.http.put(this.url + '/' + data.id, preparedData, this.options)
.pipe(map(() => true));
}
}
现在,如果data
无效,我需要返回Observable<boolean>
和false
。
在组件中,我有以下代码:
saveDatas() {
this.dataService.save(this.customer).subscribe( (resolve: boolean) => {
if (resolve) {
// save OK
} else {
// save failed (1)
}
}, (error: any) => {
// save failed (2)
});
}
如果由于this.customer.isValid
为false
导致保存失败,那么我希望subscribe
将从 dataService 中获取false
。 正是从这一行:
if (!data.isValid) {
// if data is invalid we should return before send datas to server
return new Observable<T>().pipe(map(() => false));
}
但是出了点问题,我不知道出了什么问题。
为什么不返回false
的数据服务?
通常,您会通过抛出错误来解决无效数据的故障情况
if (!data.isValid) {
// if data is invalid we should return before send datas to server
return throwError(new Error('Invalid request'));
}
然后您的错误条件可以捕获它并以有意义的方式将错误呈现给用户
也就是说,您的表格应该是这里的第一道防线,如果表格无效,它甚至不应该为您服务。 我会花时间研究反应式表单验证
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.