Вам придется воздерживаться от показа ваших диалогов в цикле.Очевидно, что к тому времени, когда ваш скрипт будет запущен, цикл будет повторяться по всем ошибкам проверки, и вы будете вызывать show
в каждом диалоговом окне, которое вы создали в цикле, для каждой такой ошибки.Вот почему у вас есть несколько диалоговых окон, отображаемых к моменту завершения сценария.
Что вы можете сделать, так это то, что вы можете создавать и показывать каждое диалоговое окно только после закрытия предыдущего диалога.Обратите внимание на модифицированную версию вашего скрипта, где вместо циклического повторения ошибок валидации (с forEach
) я продолжаю обрабатывать ошибку, показывая ее диалоговое окно, и после закрытия указанного диалога я продолжаю обрабатывать следующую ошибку, повторно используятот же массив validationErrors
:
timeSheetApi
.validate(clonedTimesheet)
.then(function (resp) {
var validationErrors = resp.data;
line.ErrorCount = 0;
line.WarningCount = 0;
line.Errors = "";
function process_next_error() {
const next_error = validationErrors.shift();
if(!next_error) return; /// No more validation errors
let confirm = $mdDialog.confirm()
.title('')
.htmlContent(timesheetError.Message)
.ok('Yes')
.cancel('No');
$mdDialog.show(confirm).then(process_next_error);
}
process_next_error();
line.Errors = cleanErrorMessage(line.Errors);
triggerOption(sourceColumn, prop, index, val, time_field);
return line;
}).catch(function (err) {
exceptionService.resolve(err);
});
Вышеуказанная функция «обработчик» - это функция process_next_error
- она вызывается непосредственно сценарием для обработки первой ошибки, но также и сценарийиспользует в качестве обратного вызова для обещания show(confirm)
, которое разрешается при закрытии диалога.
Когда больше не осталось ошибок, process_next_error
просто возвращается, ничего не делая.
The validationErrors
массив будет пуст к тому времени, когда закроется последнее диалоговое окно, потому что я постепенно «сдвигаю» элементы из него.Я предполагаю, что это не проблема, потому что что-то говорит мне, что validationErrors
является очень временной переменной в вашем приложении.Если вы хотите сохранить элементы изначально в массиве validationErrors
, вы либо берете его копию, либо выполняете итерацию по нему вместо использования shift
.