在上一个Firebase功能版本中,FirebaseDatabase触发器已更新,将其功能与onCreate
,onUpdate
和onDelete
分开,而不是始终使用onWrite
,并检查数据是否包含每次通话中都被删除了。
有人可以提供更多信息,了解是否值得将当前FirebaseDatabase
触发器迁移到新的分割功能以及如何在应用程序中更新它。
答案 0 :(得分:5)
当然值得!拆分您的功能将使您的功能缩短,清晰和快速。此外,您将避免无限次调用DatabaseTriggers
以最终应用return
。最后,您将支付应用程序正在使用的触发器数量,因此您应该尽量避免无用的通话以节省资金!
要在云端功能中首先实现它,您需要在功能firebase-functions
内的package.json
更新folder
版本,并至少将其升级到0.5.9
。
关于如何使用每个触发器,让我们更接近可以拆分的onWrite
示例。
此function
检查新comment
是否针对特定reference
,并根据是否已添加deleted
或updated
加1,减1或什么都不做:
exports.countComments = functions.database.ref('/workoutPosts/{workoutId}/info/comments/{commentId}').onWrite(event => {
const workoutId = event.params.workoutId;
//Comment created
if (event.data.exists() && !event.data.previous.exists()) {
return database.ref(`/workoutPosts/${workoutId}/meta/commentsCount`).transaction(addPrivateWorkout => {
return (addPrivateWorkout || 0) + 1;
});
//Comment deleted
} else if (!event.data.exists() && event.data.previous.exists()) {
return database.ref(`/workoutPosts/${workoutId}/meta/commentsCount`).transaction(deletePrivateWorkout => {
return (deletePrivateWorkout || 0) - 1;
});
//Comment updated
} else if (event.data.exists() && event.data.previous.exists()) {
return
}
};
每次更新通话都是无用的通话,浪费资源。我们怎样才能让这更容易?使用新的拆分云功能:
exports.countCommentsOnCreate = functions.database.ref('/workoutPosts/{workoutId}/info/comments/{commentId}').onCreate(event => {
const workoutId = event.params.workoutId;
return database.ref(`/workoutPosts/${workoutId}/meta/commentsCount`).transaction(addPrivateWorkout => {
return (addPrivateWorkout || 0) + 1;
});
});
exports.countCommentsonDelete = functions.database.ref('/workoutPosts/{workoutId}/info/comments/{commentId}').onDelete(event => {
const workoutId = event.params.workoutId;
return database.ref(`/workoutPosts/${workoutId}/meta/commentsCount`).transaction(deletePrivateWorkout => {
return (deletePrivateWorkout || 0) - 1;
});
});
您可以查看更多示例,并在下一篇文章中了解这些新功能:https://firebase.googleblog.com/2017/07/cloud-functions-realtime-database.html