Adi*_*ari 10 javascript firebase firebase-realtime-database
我正在寻找构建函数,等待所有值都打开('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)
})
Run Code Online (Sandbox Code Playgroud)
发生了什么是即将到来的t2
console.log('upcoming t2',upcomingGamesList)
Run Code Online (Sandbox Code Playgroud)
在即将到来的t1之前打印
console.log('upcoming t2',upcomingGamesList)
Run Code Online (Sandbox Code Playgroud)
但是我在这个函数中使用了await
let upcomingGamesList = await firebase.database().ref('UpcomingGames').on('value', snapshot => {
upcomingGamesList = snapshot.val()
console.log('upcoming t2',upcomingGamesList)
return upcomingGamesList
})
Run Code Online (Sandbox Code Playgroud)
它应该等到它完成然后转到下一行
我想等到函数完成后再使用我所做的更改获取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)
Run Code Online (Sandbox Code Playgroud)
Firebase的on()功能将持续监听您呼叫它们的位置.这意味着他们可以多次为您提供数据.由于一个Promise只能解决一次,on()不会返回一个承诺.因此它不能与async/ 一起使用await.
在这种情况下,它看起来像你想要使用once(),它几乎相同,但只会传递一次结果(因此返回一个承诺):
let upcomingGamesList = await firebase.database().ref('UpcomingGames').once('value', snapshot => {
upcomingGamesList = snapshot.val()
console.log('upcoming t2',upcomingGamesList)
return upcomingGamesList
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1830 次 |
| 最近记录: |