Edytuj Aby wyjaśnić: Mam dwie problemy. 1. Dlaczego mój węzeł jest nadpisany? 2. Dlaczego callback najwyraźniej nazywa się rekursywnie?System obecności Firebase: nigdy nie przestaje pisać
Podążam za this guide, aby zaimplementować system obecności na mojej aplikacji internetowej. Chcę, aby wszyscy zalogowani użytkownicy zawsze mogli wiedzieć, czy wszyscy inni użytkownicy są online, czy nie. Oto mój kod:
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);
}
});
Kiedy przetestować kod, to pisze tysiące true
aby każdy z graczy „Połączenia” -node. Dziwne jest to, że wszystkie inne dzieci każdego gracza są wymazane. Dlaczego to się dzieje? węzeł A gracz wygląda następująco:
"player1" : {
"name": "Vladimir Putin",
"country": "Russia",
...,
...,
"connections" : {
...
...
}
}
Nie ustawić „Gracz1” -node w moim kodzie, tylko dziecko niego. Wiem na 100%, że to powyższy kod powoduje to zachowanie, ale nie mogę zrozumieć dlaczego. Czy ktoś może mi powiedzieć, dlaczego powyższy kod usuwa węzły gracza?
jakie są wartości 'snap.val()'? czy istnieje powód, dla którego zmieniłeś '===' na '=='? –
Nie, właśnie zrobiłem to przypadkowo. Zmieniłem to teraz. Ta sama rzecz. Wartość snap.val() musi być prawdziwa, ponieważ wprowadza fragment kodu i wypycha inną wartość true w tablicy połączeń. – hellogoodnight
Co to jest zmienna 'newState' pojawiająca się wielokrotnie w kodzie? – vzsg