Ниже представлена моя асинхронная функция для чтения значений из БД и записи чего-либо на консоли. Но по какой-то причине этого не происходит.
Итак, я создаю массив обещаний, а затем продолжаю ждать разрешения всех обещаний, поскольку обещания будут считываться из БД. Но await on Promise.all не приостанавливает выполнение кода и не ожидает всех обещаний, чтобы разрешить вместо передачи управление обратно вызывающей функции.
Есть ли что-то, что я здесь скучаю?
async function readValuesFromDB(codes) {
console.log('trying to read values from DB');
let dbPromises = [];
for(let code in codes) {
let refId = 'some_random_reference_id_generated_from_codes[i]';
dbPromises.push(MyDb.getPromise(refId)); // getPromise() returns a promise that reads from DB
}
console.log('waiting for all promises to resolve...');
// waiting for all promises to finish
await Promise.all(dbPromises).then((allPromises) => {
for(let i in allPromises) {
console.log('OK..read from DB');
}
});
console.log('all promises resolved');
}
console.log('calling readValuesFromDB()');
readValuesFromDB();
console.log('finished readValuesFromDB()');
Вывод вышеуказанного вызова:
trying to read values from DB
waiting for all promises to resolve...
finished readValuesFromDB
......
......
OK..read from DB
OK..read from DB
OK..read from DB
...
...
all promises resolved
В идеале вывод должен быть ниже (поскольку я ожидаю разрешения всех обещаний, используя await с Promise.all )
trying to read values from DB
waiting for all promises to resolve...
OK..read from DB
OK..read from DB
OK..read from DB
...
...
Похоже, что обещания разрешаются после того, как элемент управления возвращается к вызывающей функции, и похоже, что await здесь не действует.
Любая помощь, почему await не действует в этом случае?