Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在foreach中运行firebase请求,但希望等待结果继续(异步/等待不工作)_Reactjs_Firebase_Firebase Realtime Database_Async Await_React Hooks - Fatal编程技术网

Reactjs 在foreach中运行firebase请求,但希望等待结果继续(异步/等待不工作)

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不会有任何

我使用了一个react-useEffect钩子,在这个钩子里,我从firebase的foreach中获取数据,这里没有什么奇怪的地方,这似乎起到了作用

我想等待foreach和请求完成,以便构建我的数组,并在下面的代码中使用它。但我的代码似乎并没有在继续之前等待(foreach中的console.log最后显示在我的控制台中)

我做错了什么?任何帮助都将不胜感激

Object.keys(locationObject).forEachcode不会返回
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)
  })