我在firebase云功能上创建一个通用队列来运行庞大的任务列表。我想知道我是否可以使用.on('child_added')
将新任务推送到队列中。
我得到的问题是,我的队列在10分钟或有时15分钟后随机中断。
admin.database().ref('firebase/queues/').on('child_added', async snap => {
let data = snap.val();
console.log(data);
try {
await queueService.start(data);
} catch (e) {
console.log(e.message);
}
snap.ref.remove();
});
或者我会回去使用触发器吗?
functions.database.ref('firebase/queues/{queueId}').onCreate(event => {
return firebaseQueueTrigger(event);
});
答案 0 :(得分:0)
如果您只想从数据库中检索数据,则可以在云功能中使用child_added
。
onCreate()
是一个数据库触发器,只要将新数据添加到数据库就会触发。
更多信息:
https://firebase.google.com/docs/functions/database-events
因此,当新数据添加到数据库时,将会触发提供的位置onCreate()
。两者都可用于云功能
答案 1 :(得分:0)
问题不在于使用child_added
,而是在云功能中保持活跃的on(...
。 on(...
方法会附加一个侦听器,在您调用off()
之前,该侦听器会保持连接状态。这本质上与云函数的短暂性质相冲突,云函数意味着具有触发器 - 执行 - 退出流程。通常,如果您需要在Cloud Function中读取数据库中的其他数据,则需要使用once(....
以便检测读取何时完成。
但在您的具体情况下:如果您要创建工作人员队列,那么我希望所有数据都已经使用event.data
。您的functions.database.ref('firebase/queues/{queueId}').onCreate(event
本质上是与firebase.database().ref('firebase/queues').on('child_added'
等效的云函数。