Судя по всему у вас смешаны промисы и библиотека async
https://www.npmjs.com/package/async .
Согласен с
shmatuan, что лучше всего было бы использвовать async/await. Если это невозможно советую переписать на что-то одно, либо callback'и, либо Promis'ы (лучше второе конечно).
Судя по коду проблема в том что колбэк в котором пополняется массив ассинхронный. Это значит что из внешней функции мы выйдем до его исполнения. А значит слудующий колбэк в async.series выполнится с пустым массивом.
Иван Жильников Вот это один из вариантов решения проблемы:
https://jsfiddle.net/int0h/17bojhfm/
То есть использование Promise.all
В конце есть решение на async / await, оно делает примерно то же что и ваше, но читается намного лучше и занимает 10 строк, а не 30. Спойлер, вот оно:
async function main() {
const scales = await DB.GetAllScales();
const result = await Promise.all(
scales.map(async scale => ({
TypeScales: await DB.GetTypeScales(scale.Name),
NameScales: scale.Name
}))
);
console.log('async / await result:', result);
}