2016-05-30 8 views
9

を編集する:私は2つの問題があります。 1.ノードが上書きされるのはなぜですか? 2.コールバックが明らかに繰り返し呼び出されているのはなぜですか?ファイアベースの存在システム:決して書き込みを停止しない

this guideに従って、私のWebアプリケーションにプレゼンスシステムを実装します。私は、ログインしているすべてのユーザーが、他のすべてのユーザーがオンラインであるかどうかを常に知ることができるようにしたいと考えています。

currentGameRef = gamesInProgressRef.child(newState.currentTable); 
    var myConnectionsRef = currentGameRef.child("player" + newState.myPlayerNumber).child("connections"); 
    var lastOnlineRef = currentGameRef.child("player" + newState.myPlayerNumber).child("lastOnline"); 

    var connectedRef = firebase.database().ref('.info/connected'); 
    connectedRef.on("value", function(snap) { 
    if(snap.val() == true){ 
     var con = myConnectionsRef.push(true); 
     con.onDisconnect().remove(); 

     lastOnlineRef.onDisconnect().set(firebase.database.ServerValue.TIMESTAMP); 
    } 
    }); 

私はコードをテストする場合、それはプレーヤー「接続」-nodeのそれぞれにtrueの数千人を書き込みます はここに私のコードです。奇妙なことは、各プレイヤーの他のすべての子供たちが消去されていることです。なぜこうなった? プレーヤーのノードは次のようになります。私は私のコードで「player1」-node、それだけの子を設定しない

"player1" : { 
    "name": "Vladimir Putin", 
    "country": "Russia", 
    ..., 
    ..., 
    "connections" : { 
    ... 
    ... 
    } 
} 

。私はこの動作を引き起こすのは上記のコードであることを100%は知っていますが、その理由を理解することはできません。誰かが上記のコードがプレーヤーノードをクリアする理由を教えてもらえますか?

+0

'snap.val()'の値は何ですか? '==='を '=='に変更した理由はありますか? –

+0

いいえ、私はちょうどそれを偶然しました。私は今それを変更しました。同じこと。 snap.val()の値は、コードスニペットに入り、接続配列に別のtrueを送り込むので、trueでなければなりません。 – hellogoodnight

+0

この 'newState'変数はあなたのコードに何度も現れますか? – vzsg

答えて

0

newStateに付属する変数に何か問題が生じたようです。私はここでこのテストを行った:

// Initialize Firebase 
var config = { 
    apiKey: '<your-api-key>', 
    authDomain: '<your-auth-domain>', 
    databaseURL: '<your-database-url>', 
    storageBucket: '<your-storage-bucket>' 
}; 
firebase.initializeApp(config); 

// fixed values just for test 
var newState = { 
    myPlayerNumber: 1, 
    currentTable: 2 
}; 

var gamesInProgressRef = firebase.database().ref('games'); 
currentGameRef = gamesInProgressRef.child(newState.currentTable); 
var myConnectionsRef = currentGameRef.child("player" + newState.myPlayerNumber).child("connections"); 
var lastOnlineRef = currentGameRef.child("player" + newState.myPlayerNumber).child("lastOnline"); 

var connectedRef = firebase.database().ref('.info/connected'); 
connectedRef.on("value", function(snap) { 
    if(snap.val() == true){ 
    var con = myConnectionsRef.push(true); 
    con.onDisconnect().remove(); 
    lastOnlineRef.onDisconnect().set(firebase.database.ServerValue.TIMESTAMP); 
    } 
}); 

私は次のことが起こっている。

1)まずクライアント

First client connected

2に接続されている)第2のクライアントは

Second client connected

3に接続されている)の両方のクライアントは

Both clients disconnected

を切断

これは望ましい結果であると私には思われます。したがって、newStateとして使用されているものをデバッグしよう。おそらく、あなたが「未定義」や他の固定値を取得している可能性があります。

+1

お時間を頂きありがとうございます。私はこのコードをしばらくテストします。私はあなたに戻ってきます! – hellogoodnight

関連する問題