Я пытаюсь получить некоторые данные из firebase с двумя вызовами базы данных. Моя стратегия получения учетных записей только для 1 пользователя выглядит следующим образом:
- получить все номера учетных записей для вошедшего в систему пользователя
- новый вызов fetch для получения массива учетных записей (со всеми их данными)
- диспетчерский вызов с полным массивом
Моя структура firebase выглядит так.
Моя проблема в том, что второй вызов выборки всегда заканчивается последним.
export const fetchAccounts = () => {
return (dispatch, getState) => {
const accounts = [];
const uid = getState().auth.uid;
return database.ref(`users/${uid}/accounts`).once('value').then((snapshot) => {
snapshot.forEach((element) => {
database.ref(`accounts/${element.key}`).once('value').then((snapshot) => {
accounts.push(snapshot.val());
console.log('snapshot: ', accounts);
})
});
console.log('Acc 1:', accounts);
}).then(() => {
console.log('Acc 2:', accounts)
})
// dispatch call with full array
}
};
Я вызываю действие из основного файла
reduxStore.dispatch(fetchAccounts()).then(()=>{
renderApp();
});
Можно ли дождаться завершения обоих вызовов базы данных, а затем вызвать функцию отправки с полностью заполненным массивом? Цените любую идею.