首先说明项目情况
前端:微信小程序+支付宝小程序
后端:unicloud云函数 + 云函数中有uniCloud.httpclient.request请求第三API
问题:
1.首先发现微信端、支付宝端小程序进行云函数请求有超时时间限制
比如微信最大60s,支付宝最大30s
2.然后前端进行云函数请求也有超时时间限制,阿里云和腾讯云的云函数超时时间又各不相同
阿里云函数超时时间40s?
腾讯云函数超时时间30s?
3.阿里和腾讯云函数中uniCloud.httpclient.request超时时间又不相同
实测阿里云服务空间中云函数进行uniCloud.httpclient.request请求谷歌超时时间30000ms左右,虽然我设置了3001000ms
实测腾讯云服务空间中云函数进行uniCloud.httpclient.request请求谷歌超时时间120000ms左右,虽然我设置了3001000ms
我的问题:项目中使用云函数,云函数中有uniCloud.httpclient.request请求第三方API,这个API超时时间是300s,而且是扣费的
如果扣费的第三方API还未返回,比如60s过后, 云函数中的uniCloud.httpclient.request就超时了,或者云函数就超时了,就白白扣费了
所以需要的是:
(1)尽可能提高阿里云函数中uniCloud.httpclient.reques调用第三方扣费API的超时时间,设置了没有用,现在无法达到300s
(2)尽可能提高云函数的超时时间,阿里云和腾讯云的云函数不一样,找了多次未找到明确答案
在文档中
https://uniapp.dcloud.net.cn/uniCloud/cf-functions.html#timeout 有提到
阿里云定时任务触发最大支持600秒超时时间,非定时触发时超时时间为40秒。
腾讯云定时任务触发最大支持900秒超时时间。非定时触发时超时时间为30秒。
但是实践发现,我使用的腾讯云函数许多超过30s后仍然有返回结果,所以怀疑这个准确性!
在云函数中,实际测试一段耗时任务:
let allTestNum = 0
for (let i = 0; i < 300; i++) {
let testNum = await new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1)
}, 1000)
})
allTestNum = allTestNum + testNum
console.log("allTestNum: ", allTestNum);
}
通过云函数日志查看测试结果:
阿里云函数结果只有40+秒,最终执行状态是未知
[inquiry-detail/ac1cc3031683737234844168686/39429ms/DEBUG] allTestNum: 39
[inquiry-detail/ac1cc3031683737234844168686/40430ms/DEBUG] allTestNum: 40
[inquiry-detail/ac1cc3031683737234844168686/41431ms/DEBUG] allTestNum: 41
[inquiry-detail/ac1cc3031683737234844168686/42432ms/DEBUG] allTestNum: 42
[inquiry-detail/ac1cc3031683737234844168686/43434ms/DEBUG] allTestNum: 43
腾讯云函数结果能跑完300+秒,云函数并未因为前端超时而中断执行任务,函数最终执行状态是失败
2023-05-11T01:03:38.78Z "allTestNum: " 298
2023-05-11T01:03:39.79Z "allTestNum: " 299
2023-05-11T01:03:40.80Z "allTestNum: " 300
与文档所说不一致,所以各家云函数能执行任务的时间到底是多少?
云函数中使用uniCloud.httpclient.request请求第三方API超时时间又是多少呢?
(3)尽可能提高小程序前端调用云函数的超时时间(好像各个平台有不同的限制)
希望有地方能详细搞清楚
-各端小程序调用云函数的超时时间限制
-云函数设置的超时时间限制
-阿里和腾讯云函数中http请求第三方的超时时间限制
-小程序前端+云函数+云函数中的http请求,最终决定的超时时间
最终能解决我的问题,前端小程序请求云函数,云函数调用http请求第三方API,整个过程的超时时间能有300s或者100s?
1 个回复
DCloud_uniCloud_WYQ
此文档已调整
https://uniapp.dcloud.net.cn/uniCloud/cf-functions.html#timeout
此问题也是由上面文档中的表现引发的。httpclient.request超时时间本质上是一样的