0

Firebaseの関数イベントの理解が不足しています。私の機能を意図どおりに機能させるためには、参照パスにさらに細かく追加し、必要と思われます。Firebase関数onCreate()onDelete()パスの特異性

例えば、私は数に子を追加したり、このパスから削除されるたびにインクリメントまたはデクリメントします:

/invites

私はこれを達成するために私の関数としてこれらを使用:

functions.database.ref('/invites').onCreate(event => { 
    return admin.database().ref('/counter').transaction((current) => { 
    return (current || 0) + 1; 
    }) 
}); 

functions.database.ref('/invites').onDelete(event => { 
    return admin.database().ref('/counter').transaction((current) => { 
    if (current >=1) return (current - 1); 
    else return; 
    }) 
}); 

Thisは私が上で私のパスをベースとするものですパスの指定は、その下のどこかで発生する書き込みを含め、パスに接触するすべての書き込みに一致します。あなたがfoo /バー/としてあなたの関数のパスを設定した場合、それはこれらの場所の両方でのイベントに一致します

/fooの/バー

/fooの/バー/バズ/本当に/深い/パス

私の場合、/invitesは、その例では/barに相当します。

しかし、上記の関数は、最後に削除された子だけでなく、/invitesに追加された最初の子にも発生します。これらの2つの条件の外では、何もカウンタ機能を起動しません。私はこの作品を作ることができた唯一の方法は、私の道としてこれを使用することです:

invites/{idOfInvite}

私はこれが仕事と理解している間、私はこれは私が必要とする正確に何であることを知りません。後で私は特定の{idOfInvite}のパスの下に新しいデータを追加することに決めました。それは私のカウンター機能を起動させるでしょう(私は思っていますか?)。

このSO answerは、私の関数の動作が期待されていることを示していますが、ドキュメントの理解に基づいて期待するものではありません。おそらく私はドキュメントを間違って解釈しているのでしょうか?

あなたが分かるように、これらのイベントの追加/削除の仕組みについて私が理解しているところは多少オフです。

答えて

4

onCreateは、指定されたパスがデータベースに新しく作成された場合にのみ呼び出されます。パスがすでに存在する場合(つまり、すでに子がある場合)、別の子を追加することは、そのパスで「作成」イベントではありません。更新イベントです。したがって、関数がonUpdateを使用していた場合は、そのパスの下にあるものに書き込まれるたびにトリガーされます。

でのonCreate/onDeleteの使用は、/invitesの個々の子が新たに作成または削除されたときに呼び出されることを効果的に求めているため、使用例に適しています。

関連する問題