Как я могу проверить возвращаемое значение из положенного запроса angular - PullRequest
0 голосов
/ 08 марта 2020

Я использую angular пошаговый материал, и после каждого шага я отправляю данные в бэкэнд. Итак, у меня есть этот метод на первом этапе, который возвращает LeadStatusRequest следующего вида:

export interface LeadStatusRequest {
    id: number;
    value: string;
    publicId: string;
}

и помещает метод:

public submit(): Observable<LeadStatusRequest> {
    return this.dataService
        .putData(this.formData)
        .pipe(
            catchError(err => {
                const emailErrorText: string =
                    'Email address already exists. No update performed';
                if (err.error.Errors.find(error => error.includes(emailErrorText))) {
                    this.formGroup.controls.emailAddress.setErrors({notUniqueEmail: true});
                    return throwError({isSkippedNotification: true});
                }
                return throwError(err);
            }),
        );
}

Поэтому я должен проверить, является ли результат метода submit возвращает объект с ключом "publicId", я должен установить его в localalstorage. Я пытаюсь сделать это, но в этом случае у меня есть несколько запросов пут

public submit(): Observable<LeadStatusRequest> {
        this.dataService.putData(this.formData)
            .subscribe(res => {
            if (res.publicId) {
                this.authService.setPublicId(res.publicId);
            }
        });
        return this.dataService
            .putData(this.formData)
            .pipe(
                catchError(err => {
                    const emailErrorText: string =
                        'Email address already exists. No update performed';
                    if (err.error.Errors.find(error => error.includes(emailErrorText))) {
                        this.formGroup.controls.emailAddress.setErrors({notUniqueEmail: true});
                        return throwError({isSkippedNotification: true});
                    }
                    return throwError(err);
                }),
            )
    }

1 Ответ

1 голос
/ 08 марта 2020

Похоже, что вы хотите:

  • Сделать 1 this.dataService.putData вызов
  • Выполнить некоторые условные действия, основанные на ответе об успешном выполнении
  • Обработка ошибочного ответа

Ваш оператор catchError будет работать только в случае ошибки. Все, что вам нужно сделать, это обработать успешный ответ оператора до catchError. Вы можете выполнять действия, используя оператор tap.

public submit(): Observable<LeadStatusRequest> {
  return this.dataService
    .putData(this.formData)    
    .pipe(
      tap(res => {
        if (res.publicId) {
          this.authService.setPublicId(res.publicId);
        }
      }),
      catchError(err => {
        const emailErrorText: string = 'Email address already exists. No update performed';
        if (err.error.Errors.find(error => error.includes(emailErrorText))) {
          this.formGroup.controls.emailAddress.setErrors({notUniqueEmail: true});
          return throwError({isSkippedNotification: true});
        }
        return throwError(err);
      }),
    );
}
...