- httpapi方式调用有request-promise同步请求的云函数会执行两次
问题: http api 云函数调用经常报系统错误。 过程: 有两个小程序分别各自有一个云函数, 记做 小程序a 有云函数 voiceCall 小程序b 有云函数 voiceCallForOther voiceCall 使用http api方式调用 voiceCallForOther --------------------------------------------------------------------------------------------------------- voiceCall 的调用日志 2019-07-04 18:55:35调用成功 日志内容 Request ID: 402f3ba3-9e4a-11e9-ac86-525400681fe1 执行时间: 1830.61ms内存使用: 19.49 MB 返回结果 {"voiceUrl":"","message":"fail"} 日志 START RequestId: 402f3ba3-9e4a-11e9-ac86-525400681fe1 Event RequestId: 402f3ba3-9e4a-11e9-ac86-525400681fe1 中途http api 调用voiceCallForOther的响应结果 { errcode: -1, errmsg: 'system error hint: [X1z6ta07363040!]' } ------------------------------------------------------ voiceCallForOther 的 响应 居然有两条 2019-07-04 18:55:36调用成功 日志内容 Request ID: 40e47bbf-9e4a-11e9-a5c2-525400b2c41b 执行时间: 3814.51ms内存使用: 1.16 MB 返回结果 {"resultFileURL":"","resultFileID":"","message":"OK"} 日志 START RequestId: 40e47bbf-9e4a-11e9-a5c2-525400b2c41b Event RequestId: 40e47bbf-9e4a-11e9-a5c2-525400b2c41b 2019-07-04 18:55:37调用成功 日志内容 Request ID: 415ccd29-9e4a-11e9-a5c2-525400b2c41b 执行时间: 1845.12ms内存使用: 21.29 MB 返回结果 {"resultFileURL":"","resultFileID":"","message":"OK"} 日志 START RequestId: 415ccd29-9e4a-11e9-a5c2-525400b2c41b Event RequestId: 415ccd29-9e4a-11e9-a5c2-525400b2c41b 总结调用 voiceCall 云函数使用 http api invokecloudfunction 方式调用 voiceCallForOther 云函数 ,voiceCallForOther 云函数会执行两次, 所以voiceCall 总是收到 系统错误的返回结果 { errcode: -1, errmsg: 'system error hint: [X1z6ta07363040!]' } 请问为什么出现这种结果?如何修正? ----------------------------------------------------------------------------------------------------------------- 找到原因 经过查证,是voiceCallForOther 云函数里面 有个函数 (rp为request-promise) function getAccessToken(subscriptionKey) { let options = { method: 'POST', uri: uri, headers: { 'Ocp-Apim-Subscription-Key': subscriptionKey } } return rp(options); } var accessToken = await getAccessToken(key); 只要执行await getAccessToken(key); 云函数voiceCallForOther 就会重新被系统再调用一次,和第一次一样的参数和代码执行。 发现过程:我把 await getAccessToken(key); 注释掉,就没有调用第二次voiceCallForOther 了。 诡异的是 第二次voiceCallForOther 执行的是和第一次一样的代码,所以第二次还是会执行 await getAccessToken(key),为什么第二次执行没有引发第三次 自身触发? 请官方或者大神来帮忙解惑,解决我的问题?头疼。 ----------------------------------------------------------------------------------------- 自己把await getAccessToken(key);注释了, 执行另一个含有request-promise请求的 内部函数 此voiceCallForOther 云函数依然会被执行两次。 大bug:httpapi方式调用有request-promise同步请求的云函数会执行两次 另外:我开始本地调试voiceCallForOther 运行是没有问题的。 只是http api方式调用voiceCallForOther ,会执行两次。voiceCallForOther 含有同步await request-promise请求。 吐槽:httpapi调用对云函数的响应时间只有5s。 我花了2天时间 减少云函数的运行响应时间在5s以内。 接着还有2两天时间,研究调查这个httpapi 调用这个大bug。。。。。。。。。。。。。。 总计4天时间。 强烈要求官方来答一波
2019-07-05 - 云函数无法在定时器中发送服务通知
- 当前 Bug 的表现(可附上截图) - 预期表现 - 复现路径 - 提供一个最简复现 Demo 我尝试使用以下两种方式来 cloud.openapi.uniformMessage.send cloud.openapi.templateMessage.send 来发送通知消息 在第一种情况下,通过真机调试, const wxContext = cloud.getWXContext(); var openid= wxContext.OPENID; 使用如下代码能正确获取到 openid,通知能正确发送给用户 当我将fromid和openid 保存起来,通过云开发工具来传递这两个参数进行调用的时候,抛出了异常提示如下 {"errCode":-501007,"errMsg":"openapi.uniformMessage.send:fail Invalid request param"} 我们想实现的功能是,A用户提交了订单,到了某一时刻,订单状态发生了变化,我们给A用户发送一条通知
2019-04-09 - 【需求】定时触发器支持云调用
- 需求的场景描述(希望解决的问题) 我们有个预约的业务场景,用户在提交表单后,我们会在预约时间之前给提交了表单的用户发送消息通知,提醒用户预约时间要到了。 - 希望提供的能力 我们会在定时触发器里触发云函数,其中有发送服务通知会用到uniformMessage.send 这个API,但是目前在定时任务目前不支持调用这个API。故希望能够在定时触发器里支持此API
2019-05-09