2017-04-01 2 views
1

ノードリーフジョブ/ {jobid}/proposalsの変更を監視しています。提案を削除すると、その機能が実行され、提案が再挿入されます(これは予想される動作です)。 問題は、親の{job}を削除すると、親のIDが同じ新しいオブジェクトにプロポーザルが再挿入されることです。親が存在するかどうかチェックする方法はありますか?そうであれば、そうでない場合は提案を再挿入します。Firebaseのクラウド機能削除されたノードのモニタリーフ親が存在するかどうかをチェック

exports.RecountProposals = functions.database.ref("/jobs/{jobid}/proposals").onWrite(event => { 
    const jobid = event.params.jobid; 
    if (!event.data.exists() && event.data.ref.parent.exists()) { 
     const propRef = admin.database().ref(`proposals/${jobid}`); 
     const counterRef = event.data.ref; 
     const collectionRef = counterRef.parent.child('proposals'); 
     // Return the promise from counterRef.set() so our function 
     // waits for this async event to complete before it exits. 
     return propRef.once('value') 
      .then(messagesData => collectionRef.set(messagesData.numChildren())); 
    } 
}); 

親が存在する場合、私がチェックしていますが、それはエラー表示されます。

event.data.ref.parent.exists()

例外TypeError:event.data.ref.parent.existsは

答えて

1

event.data関数ではありません。 ref.parentはReferenceタイプのオブジェクトです。リンクされたドキュメントからわかるように、Referenceにはexists()メソッドはありません。リアルタイムデータベースでは、ノードにデータがあるかどうかを知りたい場合は、そこにスナップショットを取得し、val()を呼び出してヌルかどうかを確認します。参照オブジェクトは単なるパスであり、データの知識はありません。

別の言い方をすれば、ファイルシステムの空のフォルダのように、データが存在しない「存在する」ノードという概念はありません。作成可能な任意のパスについては、そこにあるデータのスナップショットは使用可能(非ヌル)か、非(ヌル)のいずれかです。

+0

ありがとう、ノードリーフが関数によって監視/監視されており、親が削除されている場合ノードトリガを監視する関数は、トリガする必要がありますか? –

+0

はい、一致するパスの* anything *が変更された場合、関数がトリガします。新しいノード、変更された値、および削除されたノードがすべてトリガーされます。あなたが与えた道からの眺めのように、親についてはそれほど重要ではありません。 –

関連する問題