- 云开发 数据库查询 并发错误
云开发数据库 并发限制 是多少?文档上写的是会等待 - 当前 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, } }) }[代码]
2018-10-11 - 云函数加上await立即报Unexpected identifier
- 当前 Bug 的表现(可附上截图) [图片] 测试结果:失败返回结果: {"errorCode":10004,"errorMessage":"user code exception caught","stackTrace":"Unexpected identifier"} - 预期表现 - 复现路径 - 提供一个最简复现 Demo
2018-10-14 - 有用户反馈进入小程序显示undefined
有用户反馈进入小程序显示undefined 代码中用到async await 但代码中gulp有转换es7,es6转es5 遇到此类问题的用户手机是iphone6s、7p 个别几个用户遇到此类问题[图片]
2018-10-18 - 有的手机async/await打开报错
在调试工具中使用async/await没问题,但是上线后,有部分手机(比如iphone 6/6s)打开会卡在loading窗口,查看发现报错,把引用的 const regeneratorRuntime = require('../../../libs/runtime.js'); 去掉就不会报错,请问怎么解决
2018-10-22 - 云函数数据更新失败
- 当前 Bug 的表现(可附上截图) [代码]async function _Test(e) {[代码][代码] [代码][代码]let $gid = {[代码][代码] [代码][代码]'abc'[代码][代码]: [代码][代码]'456789'[代码][代码],[代码][代码] [代码][代码]'bcd'[代码][代码]: [代码][代码]'456789'[代码][代码] [代码][代码]};[代码][代码] [代码][代码]let $data = await db.collection([代码][代码]'iTest'[代码][代码]).doc(e.userInfo.openId).update({[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]style: _.set($gid)[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]return[代码] [代码]$data;[代码][代码]}[代码]得到结果:[图片],更新成功 [代码]async function _Test(e) {[代码][代码] [代码][代码]let $gid = {[代码][代码] [代码][代码]'abc'[代码][代码]: [代码][代码]'456789'[代码][代码],[代码][代码] [代码][代码]'bcd'[代码][代码]: [代码][代码]'456789'[代码][代码] [代码][代码]};[代码][代码] [代码][代码]await db.collection([代码][代码]'iTest'[代码][代码]).doc(e.userInfo.openId).update({[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]style: _.set($gid)[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}).then(res=>{[代码][代码] [代码][代码]return[代码] [代码]res;[代码][代码] [代码][代码]})[代码][代码]}[代码]得到结果:[图片],更新失败
2018-10-25 - 只需返回云数据表中的指定几个字段数据
请问怎么实现如SQL语句中的select aaa,bbb,ccc where aaa=1,只需要返回集合里包含AAA,BBB,CCC字段的数据。 下面这么写不对啊, const re = await db.collection('XXXX') aaa,bbb,ccc.where({ opid: event.userInfo.openId, }) .get({ success: function (res) { } })
2018-11-08 - 吐槽小程序异步API接口调用方式
- 需求的场景描述(希望解决的问题) 小程序提供API接口大部分都是异步接口,但是有些接口又依赖于其他接口的调用结果,这就造成为了实现一个接口调用需求而进行多层代码嵌套,代码相当不美观,也不利于开发者维护。 例如:要获取当前连接的WiFi信息,则需要三个API的嵌套调用来实现获取WiFi信息,然后再与服务器进行交互: [代码]wx.getNetworkType({ [代码][代码]//获取当前网络类型[代码] [代码] [代码][代码]success(res) {[代码][代码] [代码][代码]const networkType = res.networkType[代码][代码] [代码][代码]if[代码] [代码](networkType === [代码][代码]'wifi'[代码][代码]) {[代码][代码]//判断是wifi环境[代码][代码] [代码][代码]wx.startWifi({ [代码][代码]//初始化WiFi[代码][代码] [代码][代码]success(res) {[代码][代码] [代码][代码]console.log(res.errMsg)[代码][代码] [代码][代码]wx.getConnectedWifi({ [代码][代码]//获取WiFi信息[代码][代码] [代码][代码]success(res) {[代码][代码] [代码][代码]console.log(res.errMsg)[代码][代码] [代码][代码]wx.request({ [代码][代码]//信息获取成功,与服务器进行交互[代码][代码] [代码][代码]url: [代码][代码]'test.php'[代码][代码], [代码][代码]//仅为示例,并非真实的接口地址[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]x: [代码][代码]''[代码][代码],[代码][代码] [代码][代码]y: [代码][代码]''[代码][代码] [代码][代码]},[代码][代码] [代码][代码]success(res) {[代码][代码] [代码][代码]console.log(res.data)[代码][代码] [代码][代码]//服务器返回成功后进行页面处理[代码][代码] [代码][代码]//TODO[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码]})[代码] 以上代码除了繁琐不美观之外,还不利于维护 - 希望提供的能力 希望官方团队能将异步API实现可指定异步或同步,或者是将API封装成Promise对象,这样开发者可方便自由的通过Promise对象来模拟异步同步,还可以简化接口嵌套,简化代码,方便维护。 之所以希望官方团队将异步API封装成Promise对象而不是自己去封装,是基于良好的版本升级的考虑,如果是自己去封装,万一某次版本升级将某些API改变或者废弃,或者新增某些API,这对于开发者来说,去维护自己的封装也将是很大的开发成本。 既然小程序支持ES6的转码,那么,个人认为,如果官方团队能将所有的异步API升级为返回Promise对象,那将是对开发者相当友好的一件事,会增加开发者的热情和积极性,同时也更利于开发者维护代码。 - 补充: 其实我觉得学习promise的简单使用的成本并不是太高,尤其是跟多层嵌套调用、不利于维护等比起来,真心个人感觉这点学习成本很低。 当然,也不是没有解决办法, 比如可以通过在全局的app.js中增加一个配置项,用来指定是否全局开启异步API的promise调用方式,或者是在单个API中增加一个配置项,来指定当前API是使用原本的异步方式还是使用promise方式。 这只是个人建议,仅供参考。但我真心觉得异步API使用promise肯定会越来越成为更多开发者的呼唤和心声的!
2018-11-08 - 微信小程序调试开发微信支付功能报错
- 当前 Bug 的表现(可附上截图- 预期表现) [图片] <return_msg><![CDATA[商户号mch_id与appid不匹配]]></return_msg>
2018-11-08 - 云开发微信支付
希望有云开发的微信支付功能,这样就不用把支付的php的文件放在自己的服务器上,还得去配置相关参数
2018-10-10 - 云开发可以直接布署小程序微信支付后端服务吗?
云开发可以直接布署小程序微信支付后端服务吗?
2018-10-11