В Angular 6
я использую функцию save()
всякий раз, когда пользователь вводит новую запись в таблицу в нашем приложении.
В пределах save()
мы проверяем две вещи:
1. Ошибки проверки 'front end' AKA 'вы не можете ввести цену в столбец' Price ', если столбец' Item 'пуст' '1008 *. В этом случае данные никогда не отправляются в базу данных.
2. ошибки 'back end' Пользователь AKA пытается ввести дубликат записи. Это действительно пытается POST к базе данных через наш сервис, но база данных возвращает ошибку (база данных не может принимать записи, где каждый столбец является дубликатом).
Как только эти проверки завершены, у меня есть две переменные frontendChecked
и backendChecked
, которые я установил в 'true'.
В конце save()
я (неправильно) пытаюсь что-то сделать после завершения двух вышеуказанных процессов, используя if statement
, чтобы проверить, истинны ли эти две переменные. Этот if statement
никогда не запускается из-за асинхронного характера наших внутренних ошибок.
myComponent.ts:
save() {
var frontendChecked = false;
var backendChecked = false;
//----------- check for front end errors -----------//
for(var i=0; i< records.length; i++) {
// check for front end errors here
if( i === records.length - 1) {
frontendChecked = true;
}
}
//----------- check for backend errors (forkjoin is an observable in our service which returns asynchronously - we subscribe to it here) -----------//
this.myService.forkJoin(myArray)
.subscribe(
data => {
for (var i = 0; i < records.length; i++) {
//check for backend errors here
if( i === records.length - 1) {
backendChecked = true;
}
}
}
);
//----------- this if statement never runs because backendChecked is not finished in time -----------//
if (frontendChecked && backendChecked) {
// I need to do these things last
}
}
Как я могу убедиться, что мой оператор if в конце save()
действительно выполняется после того, как обе эти переменные были установлены? Я смотрел на async/await
с обещаниями, а также с наблюдениями. Результат this.myService.forkJoin
фактически получен из-за того, что мы подписались на наблюдаемое forkJoin
, что немного сбивает меня с толку. Есть идеи?