我尝试使用每日触发器来更改Firebase数据库中的信息。我有许多其他正常工作的云功能,但我似乎无法使用此功能来更改数据库。
const admin = require('firebase-admin');
exports.daily_job = functions.pubsub.topic('daily-tick').onPublish((event) => {
console.log("This job is run every day!");
const databaseRef = admin.database().ref('/accountActions/dailyDeletion');
databaseRef.child('delete').set("Data has been deleted!");
return "End of database clearing";
});
这是我正在测试的代码,看看触发器是否正常工作。在我的控制台中,它显示函数启动,控制台语句被记录,执行在40-90ms完成。但我的数据库永远不会改变。删除语句永远不会出现。
非常感谢任何帮助!
答案 0 :(得分:0)
The documentation解释了执行异步处理的函数必须返回JavaScript Promise:
通过返回a来解析执行异步处理的函数 JavaScript承诺
将您的代码更改为:
exports.daily_job = functions.pubsub.topic('daily-tick').onPublish((event) => {
console.log("This job is run every day!");
const databaseRef = admin.database().ref('/accountActions/dailyDeletion');
return databaseRef.child('delete').set("Data has been deleted!").then(() => {
console.log('End of database clearing');
}).catch(error => {
console.error('Database clearing failed: ', error);
});
});
答案 1 :(得分:0)
在exports.daily_job ..
之前的某处插入此命令admin.initializeApp(functions.config().firebase);
答案 2 :(得分:0)
我找到了问题的答案。我根据Firebase关于推送通知的文档初始化了应用程序:
admin.initializeApp({
credential: admin.credential.cert({
projectId: {projectId},
clientEmail: {email},
privateKey: {private key}
}),
databaseURL: {databaseURL}
});
但由于某种原因,这引起了问题。我用一个简单的
将其切换出来admin.initializeApp(functions.config().firebase);
这似乎解决了问题,推送通知仍然有效。