小程序数据获取限制问题解决

我们知道,在小程序的开发中,一般请求云数据库的数据时,单次最多返回20条,使用云函数获取单次最多返回100条。
我们在进行学区查询小程序开发时,也遇到了数据读取限制的问题,因此尝试过使用云函数的方式获取,但是最后总是无法得到数据。遂尝试数据库逐次获取,最后成功,现将解决办法写下,希望对大家有帮助。

主要思路

首先,使用数据库查询的方式一次只能返回20条数据是无法改变的,所以主要思路就像大家想的那样,逐次获取,再合并到一起。话不多说,看代码吧!
(建议先了解以下Promise的用法,大致是用来解决异步问题的,这里不赘述)

  1. 首先,我们需要拿到目标查询的总条数,函数如下:
/**获取数据长度开始 */
        function getTotal(e) {
            return new Promise((resolve, reject) => {
                collection.
                where({
                        street: _.eq(e)

                    }).count()
                    .then(
                        res => {
                            console.log("当前街镇联想查询的总条数:" + res.total),
                                resolve(res.total)

                        }
                    ).catch(err => {
                        console.error(err),
                            reject("查询失败")
                    });
            })
        }
        /**获取数据长度结束 */
  1. 其次,我们需要写一个函数,目的是每次获取20条结果
 /**单次查询函数 */
        function getResultSkip(value, skip) {
            return new Promise((resolve, reject) => {
                let selectPromise;
                console.log("拿到的值是" + value);
                if (skip > 0) {
                    selectPromise = collection.
                    where({
                        street: _.eq(value)

                    }).skip(skip).get()
                } else {
                    selectPromise = collection.
                    where({
                        street: _.eq(value)

                    }).get()
                }
                selectPromise.
                then(
                    res => {
                        console.log(res.data),
                            resolve(res.data)
                    }
                ).catch(err => {
                    console.error(err)
                    reject("查询失败!")
                });

            })

        }
        /** 单次查询函数结束*/

3.最后,就是要有一个调用以上两个函数的入口,和整合查询结果的过程

/**
         * 获取结果list
         */
        let list = [];
        new Promise((resolve, reject) => {
            getTotal(e.target.dataset.item._id).then(
                res => {
                    let count = res;//获取待查询的数据总数

                    for (let i = 0; i < count; i += 20) {
                        getResultSkip(e.target.dataset.item._id, i).then(
                            res => {
                                list = list.concat(res);
                                if (list.length == count) {//当查询结果列表的长度等于count,即结束循环
                                    if (list.length != 0) {
                                        this.setData({
                                            address: list
                                        })

                                    } else {
                                        this.setData({
                                            address: []
                                        })

                                    }
                                    resolve(list)
                                }

                            }
                        ).catch(err => {
                            console.error(err),
                                reject('查询失败')
                        })
                    }
                }
            )
        })

        /**
         * 获取结果list结束1
         */
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP内核全行业小程序运营管理系统源码 自由DIY布局 一键生成小程序,内附安装说明 无需编程,各行业模版直接套用,一键生成,轻松搭建小程序 界面自由DIY,打造个性小程序 可拖拽式DIY布局,开启自定义功能新征程,无需繁琐操作,轻松拖拽即可实现界面布局;同步实时预览,可视化操作让您所见即所得,随心打造个性小程序。 丰富功能组件,应多种场景需求 多样的功能组件,不受行业框架限制,可自由组合适应当前场景,让您轻松满足客户的定制需求。 大量插件可用,实现多样营销功能 积分签到、积分兑换商城、拼团、店内点餐、手机客服等插件可用,满足各种行业场景营销需求,助力客户小程序营销推广。 无需技术基础,轻松玩转小程序 无需代码编程,无需技术基础,简单的操作页面,清晰的模块分划,详尽的功能组件,让您短时间即可轻松玩转小程序。 垂直研发,深度挖掘行业解决方案 深入行业了解不同行业的痛点和需求,致力于解决实际问题,给客户带来实际价值,深度挖掘不同行业的解决方案。 功能介绍 分销模块:帮助企业快速搭建企业独立在线商城,自由选择分销模式,从多方位,多角度提供服务支持,助力商户实现分销渠道裂变销货,连锁门店线上化高效经营。 消息通知:设置商品状态通知、成团通知、预约预定通知、系统表单通知、会员卡开卡通知等消息模板,配置商家收发消息邮箱实现邮件通知。 万能表单:超强大的自定义表单模块,不同行业和岗位的人员不需要特殊技能,都可以方便的创建出符合业务需求的表单小程序数据收集,简单方便,客户登记、意见反馈、活动报名等轻松搞定。万能表单自动收集并整理数据,帮助用户节省工作时间,高效率、更便捷的完成工作。 文章管理系统:对文章详细内容、所属栏目、访问量、评论、分享操作、底部菜单、关联文章等进行管理。 预约报名:报名设预约报名期,在期限内预约用户进行报名。预约报名期内,用户通过填写和提交个人信息的方式进行报名,在约定期限内报满为止。 充值管理:对充值优惠规则、积分规则等进行设置和管理。 商品管理:对多规格商品、秒杀商品、预约商品进行设置和管理。 组图管理:对图片、幻灯片进行设置和管理。 小程序管理:对小程序跳转进行管理。 评论管理:对文章、组图、商品等内容下的评论进行审核和管理。 内容库管理:对多种模型的内容(文章、组图、商品)进行快速筛选 会员管理:对会员信息,会员开卡,会员卡折扣,会员卡积分等进行设置和管理。 多商户插件:多商户入驻平台插件 自定义菜单:底部菜单栏DIY,自定义外观、功能。 广告设置:对开屏广告、首页广告、弹窗广告等进行设置和管理。 一键模板:多行业优秀模板可选,一键生成场景适用小程序页面。 积分管理:对分享获取积分、充值获取积分、签到获取积分等多种积分获取形式以及积分兑换进行管理。 手机客服插件:商家为客户提供线上的咨询服务,通过手机客服为客户解决需求问题。 订单管理:对多规格商品、秒杀商品、预约预定商品等订单状态操作。 数据分析:对小程序流量数据、订单数据、交易数据等进行分析,统计活跃用户和热销商品等。 支付宝小程序:支付宝小程序制作与发布,无需编程,一键生成。 百度小程序:百度小程序制作,无需编程,一键生成,百变应用,自由组合。 权限管理:自定义配置用户可使用的功能,分别给予权限。 可拖拽DIY:APP设计制作一站式解决方案,创造出独一无二的专属小程序。无需懂代码,都可以借助DIY官网可视化工具,顷刻间打造自已的个性化移动应用。 多门店:多门店共享数据,可切换不同城市显示,搜索门店并显示门店详情。 付费视频系统:付费视频是为了维护视频版权,促进用户知识付费的一种手段。 多规格商城:多规格商城是指在商城中能够选取规格、多规格匹配。点击购买弹出弹框,用来选择规格和选择购买数量,并和库存匹配。 积分兑换商城:用户获得积分后可以在积分商城中兑换优惠券、礼品卡或商家指定商品等。 多栏目管理:对所有内容模型的栏目进行管理。 积分签到插件:用户登陆商家小程序进行每日签到,获取相应积分。 代理商管理:拥有底层源码系统,发展自己的代理商,列表清晰展示各代理商状态,详细设置对代理商账号信息、创建小程序的个数、系统到期时间等进行管理。 店内点餐插件:无需呼叫服务员,省去排队等待时间,立即点餐,即点即用。线上线下零距离对接商家厨房最短时间送餐上桌,一键快捷支付,省时省力。每个订单实时对接后台,财务报表、资金流水、客流量盈亏分析随时掌握。 拼团商城插件:参加拼团的商品都有单独购买价格和拼团价格,在规定时间内达到相应的标准人数购买,则拼团成功。 优惠券:优惠券是一种相对成熟的营销工具,可在后台添加优惠券 付费预约:通过付费缴纳定金的方式进行预约,用户预约成功后在对应时间获得商户指

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值