exports.addNewValue = functions.database.ref('/path')
.onWrite(event => {
event.data.adminRef.update({"timeSnapshot":Date.now()})})
次のようにはないのでDate.nowは()関数内で無限ループが発生することが表示されますか?クラウド機能は
exports.addNewValue = functions.database.ref('/path')
.onWrite(event => {
event.data.adminRef.update({"timeSnapshot":Date.now()})})
次のようにはないのでDate.nowは()関数内で無限ループが発生することが表示されますか?クラウド機能は
は、私は次のように正常に動作すべきだと思う: -
exports.addNewValue = functions.database.ref('/path/timeSnapshot')
.onWrite(event => { event.data.adminRef.set(Date.now()) })
上記の背後にあるロジックは、あなたが(たとえば、あなたのケースで/path
として)上位ノード上のトリガ機能を入れたときに、その関数があろうとその子ノードのいずれかに変更が加えられるたびに(あなたの場合は/timestamp
)、つまり無限ループが発生します。
したがって、一般的なプラクティスとして、効率とコスト効率のために、トリガー機能が可能な限り最も低いパスノードを持つことを確認してください。あなたのデータを平らにすることは本当にこれでも役に立ちます。
あなたが戻って以前に変更されたデータベース内の同じ場所に書き込む場合は、この一連のイベントを期待することができます:
すべてがフィルタ経路に一致するデータベースに書き込み、さらにそれらのFR中の書き込みの第二回トリガされます同じ関数内のomは、関数をトリガします。
手順3では、2番目の関数呼び出しでデータベースに書き戻す必要があるかどうかを判断する方法が必要です。別の書き込みを必要としない場合は、関数は早期に戻り、別の書き込みをトリガーしません。通常は、関数に渡されたイベントのデータを調べ、初めて変更されたかどうかを調べます。これには、データベースにフラグが設定されているか、変更したデータに変更が必要ないかどうかを調べる必要があります。
Firebaseチームによって提供されたcode samplesの多くがこれを行います。特に、text moderationをご覧ください。また、video that describes the problemと可能な解決策があります。最終的には、ニーズに合った戦略を立てる責任があります。あなたは.once(「値」)を使用してみてください照会に問題がここに到着した場合
こと...それはあなたが一度だけ...つまり
ref.orderByChild("isLive").equalTo(true).once("value" , function(snapshot) {
代わりの
基準点を見ていることを意味しますref.orderByChild("isLive").equalTo(true).on("value", function(snapshot) {
秒あなたはすべての時間を聞いて、そしてときREFのデータが変更されますよう、リスナーが変更を受信して、ブロック内のコードを実行されます再び
'onWrite()'火災時にのみ値書かれた変更です。 'Date.now()'を書くことは変更を生成しますが、固定値 'newString'は(最初から)変更しません。この機能の目標は何ですか?リッスンしている場所の値を変更するには、このタイプのループを避ける必要があります。 –