0

我在 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>with 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.isValidis导致保存失败,false那么我希望从 dataService 中subscribe获取。false正是从这一行:

    if (!data.isValid) {
      // if data is invalid we should return before send datas to server
      return new Observable<T>().pipe(map(() => false));
    }

但是出了点问题,我不知道出了什么问题。

为什么不返回数据服务false

4

1 回答 1

2

通常,您会通过抛出错误来解决无效数据的故障情况

if (!data.isValid) {
  // if data is invalid we should return before send datas to server
  return throwError(new Error('Invalid request'));
}

然后您的错误条件可以捕获它并以有意义的方式将错误呈现给用户

也就是说,您的表格应该是这里的第一道防线,如果表格无效,它甚至不应该为您服务。我会花时间研究反应式表单验证

于 2019-10-23T18:55:53.427 回答