小程序中没有连表的功能吗?
求大佬解答
小程序中没有连表的功能吗?
我一直是一个查询套一个查询,还有没有其他的方式?
for循环中进行数据库操作时,for结束数据没有返回,异步的问题,怎么搞成同步?
3 回复
目前云开发数据库没有关联表这种东西 这里偷偷给你推荐另一个免费数据库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); //循环结束,状态不一定结束 异步 } |