云函数调用小程序生成api,function name:getNewQrCode
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
try {
const result = await cloud.openapi.wxacode.getUnlimited({
scene: event.scene,
page: event.path
})
return result
} catch (err) {
return err
}
}
-----------------------------------------------------------
小程序端调用代码:
wx.cloud.callFunction({
name: 'getNewQrCode',
data: param
}).then(res => {
let data
if (res.result.errCode == 0) {
if (dataType == 'base64') {
data = `data:image/jpeg;base64,${wx.arrayBufferToBase64(res.result.buffer)}`
}
if (dataType == 'buffer') {
data = res.result.buffer
}
if (data) {
resolve(data)
} else {
reject('unknow data type')
}
} else {
reject(res.result.errMsg)
}
}).catch(err => {
console.log('云端错误:', err)
reject(err)
})
----------------------------------------------------
大部分用户能返回正确结果,但是,一旦一个用户不能返回正确结果,那他的返回的结果,永远都是
(大概4/5的用户正确,1/5的用户永远不正确)
Error: errCode:
-404012 error while waiting for the result
errMsg: cloud.callFunction:fail error while waiting for the result; at cloud.callFunction api;
at new u (VM135 [publib]:1)
at d (VM135 [publib]:1)
at Object.t.returnAsFinalCloudSDKError (VM135 [publib]:1)
at Function.<anonymous> (VM135 [publib]:1)
at VM135 [publib]:1
at Timeout._onTimeout (VM135 [publib]:1)
at listOnTimeout (internal/timers.js:535)
at processTimers (internal/timers.js:479)
查看云函数日志:
2019-05-13T06:04:43.431Z 生成了二维码数据: { contentType: 'image/jpeg',
buffer: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff db 00 43 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 ... >,
errMsg: 'openapi.wxacode.getUnlimited:ok',
errCode: 0 }
执行时间: 379.85ms内存使用: 2.38 MB
也就是说云端是执行成功的,也返回结果的
错误信息:fail error while waiting for the result
但是这个用户永远也等不到返回的结果,最后超时后抛错
是云开发平台的问题还是其他设置方面的问题呢?
不知道有没有遇到同样问题的?
感谢反馈,这是安卓 7.0.4 版本优化引入的 bug,云函数回包过大(约超过600K)时会出现报错的情况,我们将会尽快修复。
是不是要到下一版本的安卓版微信才能修复?我们线上的小程序已经用了这个云函数,影响挺大的,很多用户不能正常使用这个功能
遇到了同样的问题 微信7.0.4版本云开发数据量大时候获取不到
想办法让返回数据量小于600k即可解决
我们生成的图片也没这么大
遇到同样问题,测试的一台安卓机(三星S9+)一直报这个错,我的安卓机就正常。云函数返回的json也不大,根本没到600k
遇到同样的问题,开发工具中正常,真机就报错了
解决了,云函数中不要直接返回 buffer ,返回处理成 base64 的数据就正常了
'data:image/png;base64,'
+ result.buffer.toString(
'base64'
)
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
const result = await cloud.openapi.wxacode.getUnlimited({
page: 'pages/your/page',
scene: '',
autoColor: true,
});
return 'data:image/png;base64,' + result.buffer.toString('base64');
}