もちろん価値があります!機能を分割することで、機能を短く、明確かつ高速にすることができます。また、DatabaseTriggers
への無限の呼び出しを避け、最終的にreturn
を適用します。最後に、アプリが使用しているトリガーの数を支払うので、無駄なコールを避けてお金を節約してください!まずあなたはヨーヨーがあなたの機能folder
内でごpackage.json
上ごfirebase-functions
バージョンを更新し、少なくとも0.5.9
にアップグレードが必要になりますあなたのクラウド機能でそれを実装するために
。
トリガーを使用する方法については、onWrite
のように分割することができます。
新しいcomment
が特定reference
にwrited、それが追加されている場合に基づき、deleted
、またはupdated
それプラス1、マイナス1または何もしない。このfunction
チェック:
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
新しい分割さクラウド機能を使用します