【小程序】009 突破获取数据条数限制

举报
LongYorke 发表于 2021/02/05 11:42:51 2021/02/05
【摘要】 云函数目前是一次可获取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),
      }
    })
  }
最后赋给dbList 对象中的data数组

后面跟【小程序】008 基于云函数获取数据并去重插入云数据库一样,获取当前服务端最新数据,去重,插入数据库
实验成功

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200