我正在使用Firebase的云功能和realtimeDatabase。我有一个问题,当游戏结束时,会打开一个自定义对话框,单击该对话框可以在玩另一个游戏时点击
。$reiniciar.on("click", function () {
$casilla.css("display", "flex");
$footer_casilla.css("display", "none");
let dentro = false;
if(!dentro) {
ruta_partida.on("value", function (snapshot) {
dentro = true;
const datos = {
turno_global: 1,
casillero: [0, 0, 0, 0, 0, 0, 0, 0, 0],
ganador: 0
};
ganador = snapshot.child("datos").val().ganador;
if (ganador !== 0) {
ruta_partida.child("datos").set(datos);
let casillero = snapshot.child("datos").val().casillero;
turno_jugador.textContent = "Espere a que el rival reinicie";
} else if (ganador === 0) {
ruta_partida.child("datos").update(datos);
if (turno === 1)
turno_jugador.textContent = "Su turno";
else if (turno === 2)
turno_jugador.textContent = "Espere su turno";
let casillero = snapshot.child("datos").val().casillero;
}
});
}
casillero_viejo = [
0,0,0,
0,0,0,
0,0,0,
];
});
问题是,当游戏出现时,我什么也做不了,因为当我这样做时,数据库必须更改,并且此方法始终会重新启动数据库
答案 0 :(得分:0)
您可能应该使用once()
方法而不是on()
方法,如下所示。
使用on()方法,将在初始数据每次更改时再次触发回调。请参见有关这两种方法here和here的文档。
ruta_partida.once(function (snapshot) {
dentro = true;
const datos = {
turno_global: 1,
casillero: [0, 0, 0, 0, 0, 0, 0, 0, 0],
ganador: 0
};
ganador = snapshot.child("datos").val().ganador;
if (ganador !== 0) {
ruta_partida.child("datos").set(datos);
let casillero = snapshot.child("datos").val().casillero;
turno_jugador.textContent = "Espere a que el rival reinicie";
} else if (ganador === 0) {
ruta_partida.child("datos").update(datos);
if (turno === 1)
turno_jugador.textContent = "Su turno";
else if (turno === 2)
turno_jugador.textContent = "Espere su turno";
let casillero = snapshot.child("datos").val().casillero;
}
});