【小程序】009 突破获取数据条数限制
【摘要】 云函数目前是一次可获取1000条数据,小程序目前一次可获取20条数据。随着官方更新,这个限制会有波动,随着时间变化,歌单信息会不断增多,我们想要保证数据获取成功,就要突破获取数据条数限制主要思想是假设当前数据库有25条数据,每次取10条数据,我们要取三次。把三次取的数据拼装成一个数组,那么该数组存放了所有数据。定义能取的最大常量(考虑到性能问题MAX_LIMIT要根据自己业务需求改变,此处主...
云函数目前是一次可获取1000条数据,小程序目前一次可获取20条数据。随着官方更新,这个限制会有波动,随着时间变化,歌单信息会不断增多,我们想要保证数据获取成功,就要突破获取数据条数限制
主要思想是
假设当前数据库有25条数据,每次取10条数据,我们要取三次。把三次取的数据拼装成一个数组,那么该数组存放了所有数据。
定义能取的最大常量(考虑到性能问题MAX_LIMIT要根据自己业务需求改变,此处主要是实验学习,所以使用10)
const MAX_LIMIT = 10
异步操作计算数据总的条数,.count()返回的是对象
const countResult = await playlistCollection.count()
.total取到总条数的Number类型数字
const total = countResult.total
Math.ceil()方法可对一个数进行上舍入取整,获得总取次数
const batchTimes = Math.ceil(total / MAX_LIMIT)
定义存放每个promise的集合
const tasks = []
取的时候注意使用.skip()方法指定查询返回结果时从指定序列后的结果开始返回,用于分页
Collection.skip(offset: number)
参数
必选项。总是某个 数据库 的集合名称。
number
必选项。在读取文件时要跳过的个数。
.limit()方法用于指定查询结果集数量上限
Collection.limit(value: number)
参数
必选项。总是某个 数据库 的集合名称。
number
必选项。限制读取时数量的个数。
每次取都跳过之前取过的MAX_LIMIT才开始取MAX_LIMIT条数据
随后将取到的Promise.<Object>数据放入tasks数组中
for(let i = 0; i < batchTimes; i++){
let promise = playlistCollection.skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
tasks.push(promise)
}
每次取数据,放到一个数组中,作为一个任务,那么一共进行batchTimes 次任务,且要等到上述batchTimes 次任务操作都结束后再进行累加到tasks的操作,所以使用promise.all()方法
.reduce()应用一个表达式于数组各个元素然后归一成一个元素。cur为之前的值,cur为当前循环遍历对应的值
.concat()用于连接字符串,返回拼接后的字符串。
if(tasks.length > 0){
dbList = (await Promise.all(tasks)).reduce((acc, cur) => {
return {
data: acc.data.concat(cur.data),
}
})
}
实验成功
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)