gpt4 book ai didi

javascript - firebase 在 ('value' 上)等待不能按预期工作

转载 作者:可可西里 更新时间:2023-11-01 02:43:32 25 4
gpt4 key购买 nike

我正在寻找构建函数以等待 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
})

它应该等到它完成然后转到下一行

我想等到函数完成,然后用我所做的更改获取 updatedList

 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)

最佳答案

Firebase 的 on() 函数将持续监听您调用它们的位置。这意味着他们可以多次为您提供数据。由于 Promise 只能解决一次,因此 on() 不会返回 promise 。因此它不能与 async/await 一起使用。

在这种情况下,您似乎想要使用 once(),它的工作原理几乎相同,但只会提供一次结果(因此返回一个 promise ):

let upcomingGamesList = await firebase.database().ref('UpcomingGames').once('value', snapshot => {
upcomingGamesList = snapshot.val()
console.log('upcoming t2',upcomingGamesList)
return upcomingGamesList
})

关于javascript - firebase 在 ('value' 上)等待不能按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50495594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com