繁体   English   中英

如何使用 Observable 和 pipe() 在 Angular 8 中返回?

[英]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.isValidfalse导致保存失败,那么我希望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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM