1

を、FirebaseDatabaseトリガーはonWriteを使用すると、データがすべての呼び出しで削除かいないされているかどうかを確認常に、onCreateと彼の機能をspliting onUpdateonDeleteの代わりに、更新されています。Firebaseデータベース・トリガー:最後Firebase機能のバージョンでのonCreate、にonUpdate、onDelete

現在のFirebaseDatabaseトリガを新しいスプリット機能に移行する価値があるかどうか、またアプリケーションでそれを更新する方法について、さらに詳しい情報を提供できますか?

答えて

2

もちろん価値があります!機能を分割することで、機能を短く、明確かつ高速にすることができます。また、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

新しい分割さクラウド機能を使用します
関連する問題