2017-09-26 4 views
0

Firebase newbie here。

私は、次の$ firebaseObjectが含まれてい currentChallengeという変数持って私のコントローラで

次のように私のコントローラからのコードがある enter image description here

ように見えるFirebaseで

$$conf: {sync: {…}, ref: X, binding: f, listeners: Array(0)} 
$id: "gRH2EWGQB6dbejKYap40Z0ea0nz2" 
$priority: null 
-Kuy9HAfvVIhPhtQraLy: 
    challenge: {...} 
    challenger: "gRH2EWGQB6dbejKYap40Z0ea0nz2" 
    pending: true 
    timestamp: 1506428920780 
    __proto__: Object 
__proto__: Object 

Challenge.lastChallenge(uid, challengeUserId).$loaded() 
    .then(function (currentChallenge) { 
    if (currentChallenge.challenger == uid) { 
     // stuff happens 
    } 

これはチャレンジサービスメソッドを呼び出しています:

lastChallenge: function (uid1, uid2) { 
    var path = uid1 < uid2 ? uid1 + '/' + uid2 : uid2 + '/' + uid1; 
    return $firebaseObject(userChallengeRef 
    .child(path) 
    .orderByChild('timestamp') 
    .limitToLast(1)); 
}, 

私がアクセスしようとしているデータは、しかし、私は、オブジェクト上で動作していないよう$valueとしてこれを行うには方法がわからないよ、challengerです。

-Kuy9HAfvVIhPhtQraLyは私が見ている課題に応じて変更される可能性があります。また、必ずしも$idと同じ値になるとは限りません。

答えて

2

あなたはFirebaseに対してクエリを実行している:

userChallengeRef 
    .child(path) 
    .orderByChild('timestamp') 
    .limitToLast(1)) 

あなたはFirebaseデータベースに対してクエリを実行すると、潜在的に複数の結果があるだろう。したがって、スナップショットにはそれらの結果のリストが含まれています。結果が1つだけの場合でも、スナップショットには1つの結果のリストが含まれます。

つまり、$firebaseArrayを使用して結果を取得し、それを反復処理する必要があります。通常のJavaScript SDKを使用している場合、それはこのようなものになるでしょう:

lastChallenge: function (uid1, uid2) { 
    var path = uid1 < uid2 ? uid1 + '/' + uid2 : uid2 + '/' + uid1; 
    return new Promise(function(resolve, reject) { 
    userChallengeRef 
     .child(path) 
     .orderByChild('timestamp') 
     .limitToLast(1)) 
     .once("value").then(function(snapshot) { 
     snapshot.forEach(function(child) { 
      resolve($firebaseObject(child.ref)); 
     }); 
     }); 
} 

として、それを起動します。

Challenge.lastChallenge(uid, challengeUserId).then(function(firebaseObject){ 
    firebaseObject.$loaded().then(function (currentChallenge) { 
    if (currentChallenge.challenger == uid) { 
     // stuff happens 
    } 

私はAngularFireを使用しないと思う注あなたはここですべてのことができます。 AngularFireサービスは、Angular UIに直接バインドするものに対してのみ使用する必要があります。他のすべての操作では、Firebase JavaScript SDKを直接使用してください。コードを簡単に保ち、アプリのロジックとそのUIを簡単に推論することができます。

+0

OkこれをcurrentChallenge変数に追加するにはどうすればよいですか?これを追加した後、私はチャレンジデータではなく約束を得る。ありがとう、ごめんなさい。 – helpmeplz

+0

サンプルを追加しました。 –

関連する問題