Reactjs 在foreach中运行firebase请求,但希望等待结果继续(异步/等待不工作)
我使用了一个react-useEffect钩子,在这个钩子里,我从firebase的foreach中获取数据,这里没有什么奇怪的地方,这似乎起到了作用 我想等待foreach和请求完成,以便构建我的数组,并在下面的代码中使用它。但我的代码似乎并没有在继续之前等待(foreach中的console.log最后显示在我的控制台中) 我做错了什么?任何帮助都将不胜感激 Object.keys(locationObject).forEachcode不会返回Reactjs 在foreach中运行firebase请求,但希望等待结果继续(异步/等待不工作),reactjs,firebase,firebase-realtime-database,async-await,react-hooks,Reactjs,Firebase,Firebase Realtime Database,Async Await,React Hooks,我使用了一个react-useEffect钩子,在这个钩子里,我从firebase的foreach中获取数据,这里没有什么奇怪的地方,这似乎起到了作用 我想等待foreach和请求完成,以便构建我的数组,并在下面的代码中使用它。但我的代码似乎并没有在继续之前等待(foreach中的console.log最后显示在我的控制台中) 我做错了什么?任何帮助都将不胜感激 Object.keys(locationObject).forEachcode不会返回Promise,因此在其上调用wait不会有任何
Promise
,因此在其上调用wait
不会有任何作用
如果要等待解决多个承诺,通常需要使用Promise.all
。我通常还建议使用DataSnapshot.forEach()
而不是Object.keys().forEach()
,因为它维护子节点的顺序
所以结合起来就变成了这样:
const unsubscribe = firebase
.locations()
.once('value')
.then(async snapshot => {
let promises = [];
snapshot.forEach(element => {
promises.push(firebase.user(element.key).once('value'))
})
return Promise.all(promises);
}).then(snapshots => {
const userInformation = []
snapshots.forEach(userSnapshot => {
if (userSnapshot.exists()) {
userInformation.push({
userId: 1,
name: userSnapshot.val().username
})
}
})
console.log('userInfo', userInformation)
})
谢谢谢谢你的解释。这很好用!是否也可以将第一次回调中的快照(snapshot.val())中的数据传递给第二次回调?(使用第一个。然后在第二个。然后)以返回或其他方式传递两个数据源?我的答案中的代码将所有快照从第一个
然后()!但是它没有传递我以后要使用的原始快照值(至少我认为是snapshots.val())。有什么办法吗?
const unsubscribe = firebase
.locations()
.once('value')
.then(async snapshot => {
let promises = [];
snapshot.forEach(element => {
promises.push(firebase.user(element.key).once('value'))
})
return Promise.all(promises);
}).then(snapshots => {
const userInformation = []
snapshots.forEach(userSnapshot => {
if (userSnapshot.exists()) {
userInformation.push({
userId: 1,
name: userSnapshot.val().username
})
}
})
console.log('userInfo', userInformation)
})