小程序中没有连表的功能吗?
求大佬解答
小程序中没有连表的功能吗?
我一直是一个查询套一个查询,还有没有其他的方式?
for循环中进行数据库操作时,for结束数据没有返回,异步的问题,怎么搞成同步?
求大佬解答
小程序中没有连表的功能吗?
我一直是一个查询套一个查询,还有没有其他的方式?
for循环中进行数据库操作时,for结束数据没有返回,异步的问题,怎么搞成同步?
目前云开发数据库没有关联表这种东西 这里偷偷给你推荐另一个免费数据库bmob 你想要的功能都有
(就是不知道这条发言会不会被禁掉)
另外异步变同步可将for循环改写成函数嵌套
执行完一次后i+1然后再调用自身 用i控制什么时候出去
要注意qps30的限制 实测一秒20次数据库操作比较稳定 所以必要的话再调用自身之前写个延时50毫秒执行
getDynamisInfo: async function(dopenid, dynamicsId, _openid, i, r, q) { //获取点赞,关注,收藏,点赞数 //_openid说说的发表人 //dopenid 当前登录用户 const a = await db.collection('loves').where({ type: 1, //类型1是作品赞,2是评论赞 _openid: dopenid, //点赞者openid dynamicsid: dynamicsId, //作品id status: 1, //点赞状态 1点赞 0取消赞 //read:0,//作者已读状态 1已读,0未读 }).get(); //更新头像昵称,根据openid获取users表中的记录 const b = await db.collection('users').where({ _openid: _openid // 填入说说 openid }).get(); const c = await db.collection('loves').where({ type: 1, //类型1是作品赞,2是评论赞 dynamicsid: dynamicsId, //作品id status: 1, //点赞状态 1点赞 0取消赞 }).count(); const d = await db.collection('collect').where({ _openid: dopenid, //当前用户openid dynamicsid: dynamicsId, //作品id status: 1, //点赞状态 1点赞 0取消赞 //read:0,//作者已读状态 1已读,0未读 }).get(); const e = await db.collection('fans').where({ bFansOpenId: _openid, //被关注人openid fansOpenId: dopenid // 填入当前用户 dopenid }).get(); console.log('更新中'); console.log("点赞状态", a.data.length > 0); console.log("用户信息头像", b.data[0].avatarUrl); console.log("用户信息昵称", b.data[0].nickName); console.log("点赞数量", c.total); console.log("收藏状态", d.data.length > 0); console.log("关注状态", e.data.length > 0); if (a.data.length != 0) { //用户已点赞 r[i].loves_id = a.data[0]._id; r[i].love_status = true; } else { //如果是[],就是说没有点赞 r[i].love_status = false; } r[i].avatarUrl = b.data[0].avatarUrl; //头像更新 r[i].nickName = b.data[0].nickName; //昵称更新 r[i].love_number = c.total; if (d.data.length > 0) { r[i].collect_status = true; } else { r[i].collect_status = false; } r[i].fans_id = undefined; if (e.data.length != 0) { //用户已点赞 r[i].fans_id = e.data[0]._id; r[i].fans_status = true; } else { //如果是[],就是说没有点赞 r[i].fans_status = false; } if (r.length - 1 == i) { console.log('更新完毕'); wx.hideLoading(); // console.log(r); q = q.concat(r); this.setData({ //把所有变量清空 queryResult: q, zanArray: [], //赞了的,纯净的,点赞、取消一系列操作最后剩下的处于点赞状态的 allZan: [], //所有点过的赞,没去重 noZanArray: [], //取消赞的,需要更新数据的 loves id dynamicsid: [], //取消赞的,说说id,要减一 page: this.data.page + 1 //页数加1 }) } },for循环调用上面方法------------------ for (var i = 0; i < res.data.length; i++) { //循环获取每一条说说的点赞状态和数量关注 收藏 this.getDynamisInfo(wx.getStorageSync('openId'), res.data[i]._id, res.data[i]._openid, i, res.data, q); //循环结束,状态不一定结束 异步 } |