uni-app 定时触发云函数后数据库数据未更改
uni-app 定时触发云函数后数据库数据未更改
产品分类:
uniCloud/App
示例代码:
定时云函数配置
{
"name": "timing",
"dependencies": {},
"extensions": {
"uni-cloud-jql": {}
},
"main": "index.js",
"cloudfunction-config": {
"memorySize": 512,
"timeout": 600,
"runtime": "Nodejs12",
"concurrency": 20,
"triggers": [{
"name": "myTrigger",
"type": "timer",
"config": "0 25 6,17,23 * * * *"
}]
}
}
定时云函数
'use strict';
const db = uniCloud.database()
exports.main = async (event, context) => {
uniCloud.callFunction({
name: 'projectinitiation',
data: {}
}).then((res) => {
return res
console.log(res);
}).catch((errr) => {
return errr
console.log(errr);
})
};
定时云函数调用的云函数
'use strict';
const db = uniCloud.database()
exports.main = async (event, context) => {
uniCloud.callFunction({
name: 'mainproject',
data: {
mode: 'listAll',
data: {
projectStatus: 0
}
}
}).then((res) => {
let editId = []
const timestamp = Date.now();
res.result.data.forEach((item) => {
if (item.start_time <= timestamp) {
editId.push(item._id)
}
})
uniCloud.callFunction({
name: 'mainproject',
data: {
mode: 'modifyEachAll',
data: {
id: editId,
data: {
projectStatus: 1
}
}
}
}).then((ress) => {
return ress
// console.log(res)
}).catch((errr) => {
console.log(errr);
return errr;
})
}).catch((errr) => {
return errr
console.log(errr);
})
};
操作步骤:
- 执行定时任务
预期结果:
- 定时任务执行之后,数据库数据进行改变
实际结果:
- 定时任务执行之后,数据库数据并没有发生改变
bug描述:
使用定时云函数 变更数据库数据,并不能变更数据库数据,但是在本地调用这个定时云函数,数据库的数据是可以变更的,日志里面显示定时器触发成功,数据并没有更改
更多关于uni-app 定时触发云函数后数据库数据未更改的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
在云端运行时,所有的请求都要加await的,包括数据库请求,都要加await,云端不支持回调的写法,只能用async + await
更多关于uni-app 定时触发云函数后数据库数据未更改的实战教程也可以访问 https://www.itying.com/category-93-b0.html
好吧,我试试
在使用 uni-app 开发时,如果你通过定时触发云函数操作数据库,但发现数据库数据未更改,可能是以下几个原因导致的。你可以根据以下步骤进行排查和解决问题:
1. 云函数是否成功触发
- 检查云函数是否被定时任务成功触发:
- 在云函数的入口处添加
console.log日志,查看是否正常执行。 - 在云开发控制台的日志中查看是否有相关输出。
- 在云函数的入口处添加
- 如果云函数未触发,检查定时任务的配置是否正确。
2. 云函数是否有权限操作数据库
- 确保云函数有权限操作数据库:
- 在云开发控制台中,检查云函数的权限设置,确保有读写数据库的权限。
- 如果使用了自定义权限,确保配置正确。
3. 数据库操作代码是否正确
-
检查云函数中操作数据库的代码是否正确:
- 确保使用了正确的集合名称和字段名称。
- 检查数据库操作是否成功,例如通过
db.collection('xxx').update()或db.collection('xxx').set()方法。 - 在数据库操作后添加日志,查看是否成功执行。
const db = uniCloud.database(); const res = await db.collection('your_collection').where({ _id: 'your_id' }).update({ field: 'new_value' }); console.log('Update result:', res);
4. 定时任务的触发频率
- 检查定时任务的触发频率是否合理:
- 如果定时任务触发频率过高,可能会导致数据库操作未完成或触发失败。
- 在云开发控制台中,检查定时任务的配置,确保触发频率符合预期。
5. 数据库数据是否满足条件
- 检查数据库中的数据是否满足更新条件:
- 如果使用了
where条件,确保条件能够匹配到数据。 - 例如,
db.collection('xxx').where({ status: 1 }).update(...),如果status不为 1,则不会更新。
- 如果使用了
6. 网络或服务问题
- 检查网络或云开发服务是否正常:
- 如果云开发服务出现故障,可能会导致数据库操作失败。
- 在云开发控制台中查看服务状态,或尝试手动触发云函数测试。
7. 异步操作是否正确处理
-
确保异步操作已正确处理:
- 如果使用了
async/await或Promise,确保等待异步操作完成。 - 例如:
exports.main = async (event, context) => { const db = uniCloud.database(); const res = await db.collection('your_collection').where({ _id: 'your_id' }).update({ field: 'new_value' }); return res; }; - 如果使用了

