Как вернуться в Angular 8 с Observable и pipe ()? - PullRequest
0 голосов
/ 23 октября 2019

Я использую свою собственную службу данных в 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 получит false от dataService. Именно из этой строки:

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

Но что-то идет не так, и я не могу понять, в чем ошибка.

Почему бы не вернуть службу данных с false?

1 Ответ

2 голосов
/ 23 октября 2019

Как правило, вы обращаетесь к случаю сбоя для недействительных данных с выданной ошибкой

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

Тогда ваше условие ошибки может его перехватить и представить ошибку пользователю таким образом, который имеет смысл

Это сказало, что ваша форма должна быть первой линией защиты здесь, она не должна даже прийти к вам на службу, если форма недействительна. Я бы потратил время на проверку реактивной формы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...