Вам необходимо использовать Promise.all()
, как показано ниже (непроверено):
const array = [];
const userIds = [];
return admin
.database()
.ref('/user')
.once('value')
.then((snap1) => {
const promises = [];
snap1.forEach((childSnapshot1) => {
promises.push(
admin
.database()
.ref('/rating/' + childSnapshot1.key)
.once('value')
);
userIds.push(childSnapshot1.key);
});
return Promise.all(promises);
})
.then((snap2) => {
snap2.forEach((childSnapshot2, idx) => {
const rating = childSnapshot2.val();
array.push([userIds[idx], rating]);
});
return array;
})
.catch((error) => {
//...
});
Как объяснено в Promise.all()
do c, "возвращаемые значения будет в порядке выполнения обещаний, независимо от порядка выполнения ". Таким образом, для массивов userIds
и snap2
порядок их элементов соответствует: поэтому вы можете сделать array.push([userIds[idx], rating]);