有BUG的示例:示例代码 3:取集合所有数据
今天我的小程序在用户使用反馈到一个问题,数据导出提示出错,很明显新项目刚测试还未正式上线今天并没有产生要到处的数据。
于是到开发工具的云控制台,查询云函数的运行日志,发现有如下的报错信息:
{“errorCode”:1,“errorMessage”:“user code exception caught”,“stackTrace”:“Reduce of empty array with no initial value”}
由于没遇到过这个问题,于是就查询了MDN:
所以知道,这个原因是因为reduce的数据为空。
虽然只是个实例代码,但作为文档参考,很多新手还是会直接照搬代码,我建议官方要把这个代码优化一下,修改之后如下:
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) } // 等待所有 const result = (await Promise.all(tasks)).reduce((acc, cur) => { return { data: acc.data.concat(cur.data), errMsg: acc.errMsg, }
} |
修改了 reduce,增加一个参数 initialValue,资料参考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
-----------完毕-------------