2017-10-13 12 views
0

私はこれを使用して、すべての10件のレコードを取得しよう:Firebaseクラウド機能でchild_addedの読み込みを停止するにはどうすればいいですか?

exports.checkchanges = functions.database.ref('school/{class}').onCreate(snap => { 

    const class=snap.params.class; 

    var ref = admin.database().ref('/students') 
    return ref.orderByChild(class).startAt('-').on("child_added", function(snapshot) { 

     const age=snapshot.child("age"); 
     // do the thing 

    }) 
)} 

問題は、私は私が正しく必要な10件のレコードを取得した後、でも新しいレコードが追加される数日は、それらの用語を満たした後、この機能があるということです依然として呼び出されます。

私は(私は(私がnullに乗る値「(上をchild_added」にを変更したときに、私は代わりに、10の唯一の1レコードを取得し、をchild_added「(一度をchild_added」にを変更この:

const age=snapshot.child("age"); 

、どのように私は、将来の変更のために呼び出されるの機能を防ぐことができますが、クラウド機能のデータベースの相互作用を実装する場合

答えて

2

、それはimportanのですか?確定的終了条件を持つこと。さもなければ、クラウドファンクション環境はコードが完了した時点を知らず、すぐに終了させるか、必要以上に長く走らせる(したがって課金する)ことがあります。

コードに問題があると、リスナーをonに添付してから削除しないでください。さらに(on()は約束を返さないため)、クラウド機能はあなたが完了したことを知らない。その結果、お客様のon()リスナーが無期限に存続する可能性があります。

リアルタイムデータベースを使用する大部分のクラウド機能では、once()を使用して表示されます。 once()とすべての子を取得するには、我々はvalueイベントをリッスンます:

exports.checkchanges = functions.database.ref('school/{class}').onCreate(snap => { 

    const class=snap.params.class; 

    var ref = admin.database().ref('/students') 
    return ref.orderByChild(class).startAt('-').limitToFirst(10).once("value", function(snapshot) { 
     snapshot.forEach(function(child) { 
     const age=child.child("age"); 
     // do the thing 
     }); 
    }) 
)} 

あなたが唯一の10人の子供を必要とすることが示されたので、私は、limitToFirst(10)を追加しました。

+0

私はlimitToFirst(10)を使用しないとすべてを取得しますが、新しいonCreateが関連するまでは再びそれに戻りませんか? – user2396640

+0

'limitToFirst(10)'がなければ、クエリにマッチしたすべての**生徒が得られますが、作成された新しいクラスごとに1度しか生まれません。 –

関連する問題