我有一个messages
条目,如下所示:
firbaseapp
messages
-KiG85eYMH7jfKph4bl3
created: 1492788734743
title: "title"
message: "message"
我希望在将新条目添加到此列表时发送通知 我添加了这个云功能:
exports.sendMessageNotification = functions.database.ref('/messages/').onWrite(event => {
event.data.forEach(message => {
if (message.val().notificationSent) {
return;
}
admin.messaging().sendToTopic(...)
.then(res => {
return db.ref('/messages').child(message.key).update({
notificationSent: (new Date()).getTime(),
});
})
});
});
问题是message.key
是messages-KiG85eYMH7jfKph4bl3
所以当我尝试保存它时,它会创建一个新条目而不是更新现有条目:
firbaseapp
messages
-KiG85eYMH7jfKph4bl3
created: 1492788734743
title: "title"
message: "message"
-messages-KiG85eYMH7jfKph4bl3
notificationSent: 123434554534
我想要的是在现有条目上设置notificationSent
。
我也尝试使用message.ref
,但我得到了相同的结果。
那么在云功能中更新firebase中列表项的最佳方法是什么?
答案 0 :(得分:3)
我认为这可以完成您想要做的事情,并在评论中回答您的问题:
exports.sendMessageNotification = functions.database.ref('/messages/{messageId}')
.onWrite(event => {
const messageId = event.params.messageId;
console.log('messageId=', messageId);
if (event.data.current.child('notificationSent').val()) {
console.log('already sent');
return;
}
const ref = event.data.ref; // OR event.data.adminRef
admin.messaging().sendToTopic(...)
.then(res => {
return ref.update({
// Caution: this update will cause onWrite() to fire again
notificationSent: (new Date()).getTime(),
});
})
});