Я собираюсь построить функцию, чтобы дождаться, пока все значения в on ('value') будут установлены, а затем перейти к следующей строке, другими словами, асинхронная функция.
let upcomingGamesList = await firebase.database().ref('UpcomingGames').on('value', snapshot => {
upcomingGamesList = snapshot.val()
console.log('upcoming t1',upcomingGamesList)
return upcomingGamesList
})
console.log('upcoming t2',upcomingGamesList)
let upcomingPreferences = upcomingGamesList.map(async(game) => {
console.log(game)
let GameId = game.GameId
await firebase.database().ref(`GameNotificationPreferances/${GameId}`).orderByKey().equalTo(UserStore.user.uid).once('value', snapshot => {
if (snapshot.val() != null || snapshot.val() != undefined) {
conosle.log(snapshot.val())
} else {
console.log('not value')
}
})
console.log(game)
})
что этослучилось, если наступающий t2
console.log('upcoming t2',upcomingGamesList)
будет напечатан перед наступающим t1
console.log('upcoming t2',upcomingGamesList)
Но я использовал await в этой функции
let upcomingGamesList = await firebase.database().ref('UpcomingGames').on('value', snapshot => {
upcomingGamesList = snapshot.val()
console.log('upcoming t2',upcomingGamesList)
return upcomingGamesList
})
, и она должна дождаться еезакончить, а затем перейти к следующей строке
Я хочу дождаться завершения функции, а затем получить обновленный список с внесенными изменениями
let upcomingGamesList = await firebase.database().ref('UpcomingGames').on('value', async(snapshot) => {
upcomingGamesList = snapshot.val()
updatededList = await upcomingGamesList.map(async(game) => {
let GameId = game.GameId
await firebase.database().ref(`GameNotificationPreferances/${GameId}`).orderByKey().equalTo(UserStore.user.uid).once('value', async(snapshot) => {
if (snapshot.val() != null || snapshot.val() != undefined) {
game['reminderPressed'] = true;
} else {
game['reminderPressed'] = false
}
console.log('GameId:',GameId, 'GameDetails:',game)
return ({...game})
})
})
})
console.log('the updatedList is',updatededList)