Я создал сервисный метод, в котором я могу проверить, существует ли данный идентификатор компании в моей базе данных ... этот метод просто возвращает true или false:
public checkIfOndernemingsnummerAlreadyExists(ondernemingsnummer: string): Observable<boolean> {
const url = `${environment.apiUrl}/ondernemingen/exists/${ondernemingsnummer}`;
return this.http.get<boolean>(url);
}
Теперь я создал своего рода мастера, в котором пользователь может создать новую компанию за определенные шаги.
На первом этапе пользователь должен ввести идентификационный номер компании.
Переходя к следующему шагу, я хотел бы проверить, существует ли этот заданный идентификационный номер в моей базе данных.
Если он не существует, пользователь может перейти к следующему шагу в мастере.
Если он существует, должно появиться предупреждающее сообщение, и пользователь должен просто остаться на текущем шаге мастера.
Поэтому я добавил следующий код при отправке идентификаторов компании на первом шаге:
public submitOnderneming(): void {
this.loading = false;
this.isDuplicate = false;
of(true).pipe(
tap(() => this.loading = true),
switchMap(() => this.kandidatuurService.checkIfOndernemingsnummerAlreadyExists(this.onderneming.ondernemingsnummer)),
tap((res) => { this.isDuplicate = res; }),
switchMap(() => { if (this.isDuplicate !== true) { return this.requestService.selectOnderneming(this.onderneming); }})
).subscribe(v => { this.loading = false; this.ref.detectChanges(); });
}
Но это дает мне следующую ошибку:
Вы указали «неопределенное» там, где ожидался поток. Вы можете предоставить Observable, Promise, Array или Iterable.
Теперь я думаю, это потому, что во 2-й switchMap я возвращаю значение только тогда, когда isDuplicate не является истиной. В другом случае я ничего не возвращаю.
Мой requestService.selectOnderneming выглядит так:
public selectOnderneming(onderneming: OndernemingDetail): Observable<RequestSteps> {
this.store.dispatch(new SetOndernemingOfRequest(onderneming));
return this.gotoNextStep();
}
Так что же следует писать внутри switchMap, когда isDuplicate равен true?
Или я должен полностью изменить свой код?
Чего я хочу достичь:
- установить для свойства загрузки значение true
- call kandidatuurService.checkIfOndernemingsnummerAlreadyExists
- на основе этого результирующего набора свойство isDuplicate
- когда это не повторяющийся вызов requestService.selectOnderneming
- когда все закончено, установите для свойства загрузки значение false