云开发数据库 并发限制 是多少?文档上写的是会等待
- 当前 Bug 的表现(可附上截图)
2018-10-10T23:36:14.696Z 4642c8cc-cce5-11e8-a0af-525400e8849e { Error: errCode: -501004 exceed concurrent request limit | errMsg: Concurrent request exceeded the limit;
at new CloudSDKError (/var/user/node_modules/wx-server-sdk/index.js:2425:28)
at Object.returnAsCloudSDKError (/var/user/node_modules/wx-server-sdk/index.js:2477:16)
at Object.checkError (/var/user/node_modules/wx-server-sdk/index.js:1260:23)
at Query.<anonymous> (/var/user/node_modules/wx-server-sdk/index.js:1324:41)
at step (/var/user/node_modules/tslib/tslib.js:133:27)
at Object.next (/var/user/node_modules/tslib/tslib.js:114:57)
at fulfilled (/var/user/node_modules/tslib/tslib.js:104:62)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
errCode: -501004,
errMsg: 'Concurrent request exceeded the limit; ' }
- 预期表现
数据库请求并发数量,如同时有三十个数据库操作请求,则有二十个会同时执行,剩下十个在队列中等待有空余资源再执行
- 复现路径
- 提供一个最简复现 Demo
使用文档上的代码 数据较多的时候出错
示例代码 3:取集合所有数据
获取集合中的所有待办事项清单:因为有默认 limit
100 条的限制,因此很可能一个请求无法取出所有数据,需要分批次取:
const cloud = require('wx-server-sdk')
cloud.init()const db = cloud.database()const MAX_LIMIT = 100exports.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,
}
})
}
这是超出数据库请求并发上限了,可以控制并发数,或者可以申请提高配额(https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference/quota.html)