微信云开发<解决并封装100条数据请求限制>

143 阅读1分钟

针对微信云开发获取数据条数100条的限制,官方 也有明确的解释,以及提供对应得解决方法。

此处主要给到如何封装成方法得形式,快捷获取相应的得全量数据。

image.png

官方方法:

const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const MAX_LIMIT = 100
exports.main = async (event, context) => {
  // 先取出集合记录总数
  const countResult = await db.collection('todos').count()
  const total = countResult.total
  // 计算需分几次取
  const batchTimes = Math.ceil(total / 100)
  // 承载所有读操作的 promise 的数组
  const tasks = []
  for (let i = 0; i < batchTimes; i++) {
    const promise = db.collection('todos').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }
  // 等待所有
  return (await Promise.all(tasks)).reduce((acc, cur) => {
    return {
      data: acc.data.concat(cur.data),
      errMsg: acc.errMsg,
    }
  })
}

方法封装

utils.js

定义returnAllData方法

//返回所有数据 超100条返回
exports.returnAllData = (event, context) => {
  return new Promise(async (resolve, reject) => {
    try {
      const { name } = event
      const MAX_LIMIT = 100
      // 先取出集合记录总数
      const countResult = await db.collection(name).count()
      const total = countResult.total
      if (!total) { //如果为空则直接返回 []
        resolve([])
        return
      }
      // 计算需分几次取
      const batchTimes = Math.ceil(total / 100)
      // 承载所有读操作的 promise 的数组
      const tasks = []
      for (let i = 0; i < batchTimes; i++) {
        const promise = context.skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
        tasks.push(promise)
      }
      // 等待所有
      const result = (await Promise.all(tasks)).reduce((acc, cur) => {
        return {
          data: acc.data.concat(cur.data),
          errMsg: acc.errMsg,
        }
      })
      resolve(result.data)
    } catch (error) {
      reject(error)
    }
  })
}
如何调用
const _utils = require('../utils/index')
...
// data 为返回得全量数据
const data = await _utils.returnAllData(
{ name: '集合名' },
db.collection('集合名').where({查询参数}).orderBy('createTime', 'desc'))