Estoy construyendo un sitio web de chat. Todo funciona muy bien excepto el estado de actividad. Al principio parece funcionar, pero a veces falla, especialmente cuando un usuario envía un mensaje. Cambia automáticamente al valor anterior (por ejemplo, "en línea" pasa a "hace 10 minutos", que es el valor anterior de la base de datos. Estoy usando JS y Firebase. Tiene 4 partes que son responsables del estado de la actividad. Incluso aunque la base de datos contiene el buen valor de la actividad. Algo en mi código está roto y muestra el valor incorrecto.
Aquí está mi código:
// logging and disconnecting firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION); firebase.auth().onAuthStateChanged(function (user) { if (user) { currentUser.style.display = "block"; currentUser.innerHTML += firebase.auth().currentUser.email; document.getElementById("logout").style.display = "block"; username = firebase.auth().currentUser.displayName; // updating the user's online status let connectionsRef = db.ref("status/" + username + "/connections"); let lastOnlineRef = db.ref("status/" + username + "/lastOnline"); let connectedRef = db.ref(".info/connected"); connectedRef.on("value", function (snapshot) { if (snapshot.val() === true) { const connection = connectionsRef.push(); connection.onDisconnect().remove(); connection.set(true); lastOnlineRef.onDisconnect().set(firebase.database.ServerValue.TIMESTAMP); } }); } }); // setting user's last-online status (function) function lastOnline() { let lastOnline = db.ref("status/" + receiver + "/lastOnline"); lastOnline.on("value", function (snapshot) { const lastOnlineDate = snapshot.val(); const displayedLastOnline = timeSince(lastOnlineDate); document.getElementById("status").innerHTML = "last seen: " + displayedLastOnline + " ago"; }); } // logging out (function) function logout() { firebase.auth().signOut().then(() => { window.location.replace("./index.html"); }).catch((error) => {}); }