收藏
回答

访问数据库问题?

   
//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是空数组

怎么解决?

回答关注问题邀请回答
收藏

2 个回答

  • 李东bbsky
    李东bbsky
    2020-04-27

    不建议把数据库请求放在循环里这样来处理,如果这个操作属于高频,建议修改数据库的设计。

    2020-04-27
    有用
    回复
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2020-04-27

    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)
      })
    }
    

    若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人

    2020-04-27
    有用
    回复
登录 后发表内容
问题标签