Асинхронный код усложняется, когда вы смешиваете обратные вызовы с обещаниями и async / await. Я считаю, что следующее должно сработать для вас. Он использует проект , который я начал упрощать сложные асинхронные c задачи, подобные вашей.
const { pipe, map, get } = require('rubico')
// page => firebase_folders_response
const getFirebaseFolders = page => firebase.storage().ref(page).listAll()
// folderRef => [{ url, name }]
const getAllFilesCallback = pipe([
folderRef => folderRef.listAll(),
get('items'),
map(file => pipe([
file => file.getDownloadURL(),
url => ({ url, name: file.name }),
])(file)),
])
// [[...], [...], [...], ...] => [...]
const flatten = arr => arr.flat(1)
// page => [files]
const getAllFilesFunction = pipe([
getFirebaseFolders,
// page -> firebase_folders_response
get('prefixes'),
// firebase_folders_response -> [folderRef]
map(getAllFilesCallback),
// [folderRef] => [[{ url, name }, ...], [{ url, name }, ...], ...]
flatten,
// [[{ url, name }, ...], [{ url, name }, ...], ...] => [{ url, name }, { url, name }, ...]
])
// then, in your class
// ...
async getAllFiles(page) {
return getAllFilesFunction(page)
}