2016-11-05 7 views
2

firebaseでデータを返すときに、child_addedvalueの間に少しの違いがあります。'child_added'と 'value' firebaseの違いは?

データのフェッチ:

ref.orderByChild('appUserName') 
    .equalTo(issuer) 
    .once('value') 
    .then(function (snapshot) { 
     var value = snapshot.val(); 
     if (value) { 
      // Has Value... 
     }else{ 
      //Has No Value... 
     } 

データ構造:

AppUsers -- 
    234jl23jl4kj23 -- 
     data -- 
      //.. data 
     userName : "testUser1", 
     userPass: "password123" 
    9873h23foiu34u 
     //same structure 
    o8987s52df134o 
     //same structure 

値があり、どのように私console.log場合、私はsnapshot.val()はこのようにそれを使って何かかどうかを返したかどうかを確認するためにテストすることができvalueを使用しますsnapshot.val()を返します。生成されたキーのレベルでデータを返します。

{234jl23jl4kj23 -- 
    {data -- 
     //.. data 
    userName : "testUser1", 
    userPass: "password123"}} 

私はchild_addedを使用してデータを取得する場合:

ref.orderByChild('appUserName') 
    .equalTo(issuer) 
    .once('child_added') 
    .then(function (snapshot) { 
     var value = snapshot.val(); 
     if (value) { 
      // Has Value... 
     }else{ 
      //Has No Value... 
     } 

issuerappUserNameに値として見つからない場合、それも.then機能に入る文句を言わないので、それが値を得た場合、私はfirebase機能で見カントか否か。また、child_addedがデータを取得する方法は、1レベル深いです。代わりにそれはそのキーの値を返し、生成した鍵で返す:

{data -- 
    //.. data 
userName : "testUser1", 
userPass: "password123"} 

それが1つの以下のループになるので、私はそれをこの方法を使用することを好む私は最初の内のデータを取得するためにチェックする必要がありますキーを押してから、データスポット内のオブジェクトをループします。しかしissuerappUserNameにないなら、私にも、ifelse

を行うすることが文句を言わない機能に入るルーピングなしchild_addedほど深いのでドリルが、それでもかどうかを確認するためにif elseを行うことができるようにする方法はありますsnapshot.val()には何もありますか?

答えて

4

照会するノードの下にある一致する各子のイベントが発生します。一致する子がない場合は、起動しません。

ノードが存在するかどうかをテストするには、valueハンドラを使用する必要があります。クエリは複数の結果を持つことができるため、子プロセスをループする必要があります。

+0

ああ、それは意味があります。ありがとう。 – Chipe

関連する問題