uni-app 云函数 异步任务不执行
uni-app 云函数 异步任务不执行
示例代码:
'use strict';
exports.main = async (event, context) => {
let table = uniCloud.database().collection('test')
// 同步能执行
await table.add({test:"sync"})
// 异步没执行
table.add({test:"async"})
return {
code:200,
msg:'success'
}
// {file,event}
};
操作步骤:
- 将代码粘贴到云函数,调用云函数
预期结果:
- 数据表test添加{test:“sync”}和{test:“async”}两条数据
实际结果:
- test表只添加{test:“sync”}1条数据
table.add({test:"async"})异步操作没执行
bug描述:
- 在云函数中,异步任务不执行
更多关于uni-app 云函数 异步任务不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
6 回复
在阿里云官方的函数计算中,可以配置preFreeze来解决这个bug
uniCloud有类似的解决方案么?
更多关于uni-app 云函数 异步任务不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
没有,目前是函数返回后进程就会结束
同问,这个问题怎么解决?
回复 1***@qq.com: 请问这个任务队列,是开一个定时任务的云函数吗,保持那个处理定时任务的队列实例一直不释放?
这是因为云函数执行环境在函数返回后会立即冻结,未完成的异步操作会被中断。当云函数返回 return 语句后,即使有未完成的异步任务,云函数容器也会立即终止执行。
在你的代码中:
await table.add({test:"sync"})是同步等待,会执行完成table.add({test:"async"})是异步操作,在函数返回时还未执行完成就被中断了
解决方案:
- 等待所有异步操作完成:
exports.main = async (event, context) => {
let table = uniCloud.database().collection('test')
await table.add({test:"sync"})
await table.add({test:"async"}) // 添加 await
return {
code:200,
msg:'success'
}
};
- 使用 Promise.all 并行执行:
exports.main = async (event, context) => {
let table = uniCloud.database().collection('test')
await Promise.all([
table.add({test:"sync"}),
table.add({test:"async"})
])
return {
code:200,
msg:'success'
}
};


