Можете ли вы помочь мне понять, почему это не работает:
Я работаю в Аурелии и пытаюсь проверить некоторые входные данные с помощью контроллера проверки, который задокументирован здесь: https://aurelia.io/docs/plugins/validation#validation-controller
Теперь у меня есть карта этих данных, где мне нужно оценить каждую запись, и я хочу создать массив, где каждый элемент содержит результат проверки каждой записи, а когда все будет сделано, вернуть массив.
Так что-то вроде этого (упрощенно):
function ValidateAll(InputDataMap){
let validationResults = new Array();
InputDataMap.forEach((item) => {
validationResults.push(validateEntry(item));
});
return validationResults;
}
function validateEntry(item){
(aurelia's validation)controller.validate(item, "some value", "some rule")
.then(result => {
return result;
});
}
Теперь, конечно, это не сработает, потому что мне нужно подождать, пока контроллер проверки не выполнит свое обещание, прежде чем я смогу получить какие-либо данные обратно, и до сих пор у меня ничего не получалось.
Я прочитал, что если вы используете ключевое слово async / await, оно приостановит функцию, пока обещание не будет выполнено, поэтому я внес изменения, что-то вроде этого:
function ValidateAll(InputDataMap){
let validationResults = new Array();
InputDataMap.forEach(async(item) => {
let result = await validateEntry(item);
validationResults.push(result);
});
Так вот, это тоже не работает, и это то, что меня интересует. Я полагаю, что моя функция «validateEntry» считается завершенной «await» после ее запуска и не ожидает разрешения обещания функции «validate ()» внутри «validateEntry». Могу ли я написать это так же просто, как это, с несколькими изменениями и все же заставить его работать?