Поскольку функция await
появляется (обратный вызов forEach
) не является функцией async
.Если вы делаете это одно, остерегайтесь того, что forEach
ничего не делает с возвращаемым значением обратного вызова, что будет обещанием, если это функция async
, и поэтому вы должны быть уверены, что обрабатывает встроенные ошибки (что вы делаете).
Но , ваш return report
предполагает, что вы ожидаете завершения этого процесса.Помните, что forEach
будет , а не дождаться выполнения обещания предыдущей итерации, прежде чем перейти к следующей.Если вы хотите сделать это, используйте вместо этого обещание reduce
и await
результат (я полагаю, это все в функции async
):
await Object.entries(sqlqueries).reduce((p, [queryName, queryTpl]) => {
const querystr = replVars(queryTpl, vars);
return p.then(async() => {
report[queryName] = await query(querystr);
});
}, Promise.resolve());
return report;
Или, если вы можете запуститьЗапросы параллельно, используйте map
и Promise.all
вместо, и снова await
результат:
await Promise.all(Object.entries(sqlqueries).map(async ([queryName, queryTpl]) => {
const querystr = replVars(queryTpl, vars);
report[queryName] = await query(querystr);
}));
return report;