去年火力地堡功能版本,FirebaseDatabase触发器已更新与onCreate
,onUpdate
和onDelete
劈裂他的功能,而不是始终使用onWrite
和检查数据已经在每个呼叫被删除或不。火力地堡数据库触发器:的onCreate,的onUpdate,onDelete
有人可以提供更多关于是否值得将当前触发器迁移到新的分离功能以及如何在应用程序中更新它的信息。
去年火力地堡功能版本,FirebaseDatabase触发器已更新与onCreate
,onUpdate
和onDelete
劈裂他的功能,而不是始终使用onWrite
和检查数据已经在每个呼叫被删除或不。火力地堡数据库触发器:的onCreate,的onUpdate,onDelete
有人可以提供更多关于是否值得将当前触发器迁移到新的分离功能以及如何在应用程序中更新它的信息。
当然是值得的!拆分您的功能将使您的功能缩短,清晰和更快。您也将避免无限呼叫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