//js
getType(typeName,length){
// console.log(typeName[i]);
for(var i=0; i<length; i++){
db.collection(typeName[i].typeName).get({
success:_res=>{
console.log(_res.data)
this.setData({
test:this.data.test.concat(_res.data)
})
}
})
}
}
要实现的问题是用for循环从数据库拿数据,然后连接到test
但问题每当一轮循环,上一个_res的值会被下一个接收到的值覆盖
最后会变成test是空数组
怎么解决?
不建议把数据库请求放在循环里这样来处理,如果这个操作属于高频,建议修改数据库的设计。
1、每个类型一个表?貌似这样设计数据库不是很合理呀
2、for查询数据表,你的代码存在同步异步的问题
getType(typeName, length){ var t = this, ps = [] for (var i = 0; i < length; i++) { ps.push((function(tName){ return function(){ return db.collection(tName).get() } })(typeName[i].typeName)) } Promise.all(ps).then(res=>{ var d = [] for (var i in res) { d = res[i] && res[i].data ? d.concat(res[i].data) : d } t.setData({ test: d }) }).catch (e=> { console.error(e) }) }
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人