async
функция может быть в качестве обратного вызова, но только если возвращаемое значение (обещание) используется каким-либо образом, который помогает поддерживать правильный поток управления. Примером является массив map
callback.
Это тот же случай, что и эта проблема с forEach
. Проблема в том, что transaction
использует значение из async
обратного вызова (обещание), но значение из each
обратного вызова игнорируется.
Рецепт для выполнения обещаний последовательно с async
равен for..of
или другой оператор цикла:
await sequelize.transaction(async function (t1) {
for (const value of data)
await DoWork(value);
});
Рецепт для выполнения обещаний параллельно с async
- Promise.all
с map
:
await sequelize.transaction(async function (t1) {
await Promise.all(data.map(async (value) => {
await DoWork(value);
}));
});
async
функции оставлены для справки только потому, что код не использует их; это могут быть обычные функции, которые возвращают обещания.