javascript - 在地图内循环
问题描述
结果竟然是先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)
}
})
})
})
})
})`
解决方案
.map
不会等待每个承诺都完成,因此在任何数据库调用有机会完成之前,首先处理两个控制台日志,然后每个后续日志都是正在解决的承诺。
现在至于为什么日志加倍,可能是因为您获取数据的方式存在问题,也可能是因为这个。
推荐阅读
- javascript - 我们如何从赛普拉斯的一个文件夹中读取多个文件?
- swiftui - 相对于另一个居中视图定位视图
- node.js - Node.js API 服务器 - 无法构建
- sql - 条件非空约束
- javascript - JS 构造函数正在输出未定义的值
- java - JavaFX:ObservableListWrapper 无法转换为 TableView 中的类
- jquery - MVC 中的 Jquery ajax POST 调用 - 包括 IIS 中托管的应用程序名称
- javascript - 如何在 php 和 mysql 上实现数据表
- angular - “UpdateEmployeeComponent”类型上不存在属性“已提交”
- android - 在 Glide 库中加载字符串本地地址