Я предполагаю, что эти потоковые события не совместимы с * asyn c; Возможно, вам придется прибегнуть к созданию собственной цепочки обещаний. Потенциально вы могли бы сделать это следующим образом:
let datarow = {};
let pr = Promise.resolve();
// ...
if (counter % BATCH_COUNT === 0) {
let scopedRows = datarows.slice(); // scoped shallow copy
pr = pr.then(()=> batchWriteToDynamo(scopedrows, tableName));
// ...
.on("end", async function() {
pr = pr.then(()=> batchWriteToDynamo(datarows, tableName));
Это должно гарантировать, что ваши пакетные записи происходят по одному и в правильном порядке. Обратите внимание также на мелкую копию datarows
во время события данных. Я уверен, что это необходимо, поскольку события и обещания будут происходить в непредсказуемом порядке.
Но, в конце концов, в этом не должно быть необходимости, поскольку, я думаю, datarows
больше не должно меняться в этот момент.