我正在尝试使用每日触发器来更改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中完成。但是我的数据库永远不会更改。删除语句从未出现。
任何帮助将非常感谢!
我找到了问题的答案。根据Firebase的推送通知,我已经根据Firebase的文档初始化了该应用程序:
admin.initializeApp({
credential: admin.credential.cert({
projectId: {projectId},
clientEmail: {email},
privateKey: {private key}
}),
databaseURL: {databaseURL}
});
,但由于某种原因,这引起了问题。我用简单的
切换了admin.initializeApp(functions.config().firebase);
这似乎已解决了问题,推动通知仍在工作。
文档解释说,执行异步处理的函数必须返回JavaScript Promise:
解决通过返回A执行异步处理的函数 JavaScript Promise
将代码更改为:
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);
});
});
exports.daily_job ..
插入此命令admin.initializeApp(functions.config().firebase);