小程序云函数之嵌套查询

匿名 (未验证) 提交于 2019-12-02 23:26:52

刚用云开发,我不知道小程序数据库有没有嵌套查询的语句,所以我只能用最笨的方法,查找出来循环再查找,好,接下来,问题就是,你查找出来了没有,查找出来的值是什么类型的值,我弄这个问题整整弄了一天,我刚开始直接在小程序端弄的,能弄出数据来,但是我这个好像是顺序查询,会出现延迟的情况,当我还没查询完就已经把数据显示出去了,导致我部分数据是没法显示出来的,因为我看到appData里面的数据刚以刷新页面的时候,数据是不完善的,只获取到了顺序查询中的第一个数据,后面的还全部没渲染出来,虽然我console.log(res)能显示全部数据,过一会点回appData,数据就又全部显示了,但是我的页面已经显示完了。所以我就认为它是数据延迟,我就觉得必须把所有查询出来再传值。这算不算同步?所以我就想到要在云函数中弄,这里有一个,对于新手来讲

每次修改了云函数中的代码,记得上传并部署,要不然就跟没改一样,一开始我以为上传一次就够了(新建它自动帮忙上传了),后面不管我怎么改都没显示出什么。

先说一下我嵌套查询的是什么吧

从一个group中获取到list(group),循环这个list(group),取得carid去表carMsg取得对应的carMag数据,再取得前条carMsg数据表中openid去获取user。不知道描述清楚了没有,group->carMsg->user,最后拼接我自己想要的数据,返回一个对象出来就好了,因为返回的可能是列表,所以,这个要注意。弄到想吐血。我的是列表,如果是单挑数据的就不用考虑把数据插入列表中,直接把查找出来的数据直接return就可以,接下来上代码:

 // 云函数入口文件 const cloud = require('wx-server-sdk')  cloud.init() const db = cloud.database() // 云函数入口函数 exports.main = async(event, context) => {   const wxContext = cloud.getWXContext() // 这里获取到的 openId 和 appId 是可信的   //直接通过wxcontext获取该用户的openid   const openid = wxContext.OPENID   //承载所有读操作的promise的数组   const list = []    //接下来是开始查询,先根据openid获取到相关的group,这里获取的是列表   await db.collection('group').where({     _openid: openid,     group_reveal: 0   }).get().then(res => {     //循环查询到的列表,对每个列表进行对应数据的查询     for (let i = 0; i < res.data.length; i++) {       //per1用来定义最终的我想要的对象,插入结果list中的对象,根据对应的caricd得到carMsg对象       let per1 = db.collection('carMsg').where({         _id: res.data[i].carMsg       }).get().then(ce => {         //根据carMsg对象中的openid获得user对象         return db.collection('user').where({           _openid: ce.data[0]._openid         }).get().then(ue => {           //声明对象,为下面拼接对象用           const per = {}           //拼接自己想要的信息           per.groupid = res.data[i]._id           per.openid = res.data[i]._openid           per.carid = res.data[i].carMsg           per.endPoint = ce.data[0].carMsg.endPoint           per.lowNum = ce.data[0].carMsg.lowNum           per.estimate = ce.data[0].carMsg.estimate           per.people = ce.data[0].carMsg.people           per.nickName = ue.data[0].nickName           per.avatarUrl = ue.data[0].avatarUrl           // 返回对象           return per         })       })       //加入到列表中       list.push(per1)     }   })    return (await Promise.all(list)) } 
 //小程序端   onLoad: function(options) {     var that = this      wx.cloud.callFunction({       name:'groupMsg',   //这个是云函数名       success:function(e){         console.log("成功",e)         that.setData({           list:e.result  //设置值         })       },fail:function(e){         console.log("失败", e)        }     })   },

总感觉我写复杂了,刚开始我在(下面代码注释处)

for (let i = 0; i < res.data.length; i++) {

let per1 = db.collection('carMsg').where({

//这里_id: res.data[0].carMsg,我的0没换回i也是照样可以找出数据的,不知道为什么

_id: res.data[i].carMsg

}).get().then(ce => {

新手入坑,多多指教。

文章来源: https://blog.csdn.net/c1249629019/article/details/89293188
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!