realtime - leer datos de firebase javascript
Cómo eliminar/eliminar nodos en Firebase (5)
Como otros han notado, la llamada a .remove()
es asincrónica. Todos debemos ser conscientes de que nada sucede "instantáneamente" , incluso si está a la velocidad de la luz.
Lo que quiere decir con "instantáneamente" es que la siguiente línea de código debería poder ejecutarse después de la llamada a .remove()
. Con las operaciones asincrónicas, la siguiente línea puede ser cuando los datos se han eliminado, puede que no , es totalmente casual y la cantidad de tiempo que ha transcurrido.
.remove()
toma un parámetro de una función de devolución de llamada para ayudar a manejar esta situación para realizar operaciones una vez que sabemos que la operación se ha completado (con o sin un error). .push()
toma dos params, un valor y una devolución de llamada al igual que .remove()
.
Aquí está su código de ejemplo con modificaciones:
ref = new Firebase("myfirebase.com")
ref.push({key:val}, function(error){
//do stuff after push completed
});
// deletes all data pushed so far
ref.remove(function(error){
//do stuff after removal
});
Estoy usando Firebase para una aplicación web. Está escrito en Javascript sin usar bibliotecas externas.
Puedo "presionar" y recuperar datos con ''.on ('' child_added '')'', pero ''.remove ()'' no funciona como debería. De acuerdo con la API,
"Firebase.remove () - Elimina los datos en esta ubicación de Firebase. También se eliminarán los datos en las ubicaciones de los niños. El efecto de la eliminación será visible inmediatamente".
Sin embargo, la eliminación no está ocurriendo inmediatamente; solo cuando todo el script se ejecuta. Necesito eliminar y luego usar el árbol despejado inmediatamente después.
Código de ejemplo:
ref = new Firebase("myfirebase.com") //works
ref.push({key:val}) //works
ref.on(''child_added'', function(snapshot){
//do stuff
}); //works
ref.remove()
//does not remove until the entire script/page is done
Aquí hay una publicación similar here pero no estoy usando las librerías Ember, y aun así parece una solución para lo que debería ser tan simple como lo explica la API.
El problema es que llamas a remove
en la raíz de tu Firebase:
ref = new Firebase("myfirebase.com")
ref.remove();
Esto no funcionará, porque no puedes eliminar una Firebase completa a través de la API.
Sin embargo, puedes eliminar cualquier niño debajo de él.
ref.child(key).remove();
Espero que este código ayude a alguien, es de la documentación oficial de Google Firebase :
var adaRef = firebase.database().ref(''users/ada'');
adaRef.remove()
.then(function() {
console.log("Remove succeeded.")
})
.catch(function(error) {
console.log("Remove failed: " + error.message)
});
Para eliminar un registro.
var db = firebase.database();
var ref = db.ref();
var survey=db.ref(path+''/''+path); //Eg path is company/employee
survey.child(key).remove(); //Eg key is employee id
Firebase.remove()
como probablemente la mayoría de los métodos de Firebase son asincrónicos, por lo tanto, debes escuchar los eventos para saber cuándo sucedió algo:
parent = ref.parent()
parent.on(''child_removed'', function (snapshot) {
// removed!
})
ref.remove()
Según los documentos de Firebase, debería funcionar incluso si pierdes la conexión de red. Si desea saber cuándo se ha sincronizado realmente el cambio con los servidores de Firebase, puede pasar una función de devolución de llamada al método Firebase.remove
:
ref.remove(function (error) {
if (!error) {
// removed!
}
}