首页 > 解决方案 > 在地图内循环

问题描述

这是我的控制台.log

结果竟然是先console 2学生,然后所有数据翻了一番

我想要的是拥有

student 1 {
  data:H3FX.., data:I3ui.., data:RdYS.., ....
}

student 2 { 
  data:H3FX.., data:I3ui.., data:RdYS.., ....
}

我多次对反应渲染和语法感到困惑。

this.state.allStudent.map(student => {
      console.log('student:'+student.id);
      studentid = student.id
      db.doc(this.props.location.state.userCourse).collection('assignment').get().then( snapshot =>{
          snapshot.forEach(doc=>{
            db.doc(this.props.location.state.userCourse).collection('assignment').doc(doc.id).collection('student').get().then(query=>{
              query.forEach(querysnapshot=>{
                if(querysnapshot.data().studentid == student.id){
                  console.log('data:'+doc.id)
                }
              })
            })
          })
      })
    })`

标签: javascriptreactjsfirebasegoogle-cloud-firestore

解决方案


.map不会等待每个承诺都完成,因此在任何数据库调用有机会完成之前,首先处理两个控制台日志,然后每个后续日志都是正在解决的承诺。

现在至于为什么日志加倍,可能是因为您获取数据的方式存在问题,也可能是因为这个。


推荐阅读