Estoy usando la base avanzada para una aplicación web. Es escrito en la llanura de Javascript no usar librerías externas.

Me puede «empujar» y recuperar datos con ‘.en(«child_added»)’, pero ‘.remove()’ no funciona de la manera que se dice de lo que debería. De acuerdo a la API,

«Firebase.remove() –
Eliminar los datos en este Firebase ubicación. Cualquier dato al niño lugares también se eliminarán.
El efecto de la eliminación será visible inmediatamente.»

Sin embargo, la quita no se está produciendo de inmediato; sólo cuando la totalidad de la secuencia de comandos se realiza ejecutando. Necesito quitar y, a continuación, utilizar el aclarado árbol inmediatamente después.

Ejemplo de código:

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

Hay un puesto similar aquí pero no estoy utilizando el Ascua a las bibliotecas, y aún así parece una solución para lo que debería ser tan simple como la API explica a ser.

  • Es bastante claro lo que usted piensa que está mal aquí. El remove() funciona bien. Está realizando un montón de actividades asincrónicas aquí y parece ser que piensen que son sincrónicas (pista: no hay ninguna garantía de que los eventos se llevarán a cabo a menos que usted use el éxito de las devoluciones de llamada para activar el siguiente evento)
InformationsquelleAutor user3771957 | 2014-10-23

6 Comentarios

  1. 86

    El problema es que llame a remove en la raíz de la base avanzada:

    ref = new Firebase("myfirebase.com")
    ref.remove();

    Esto eliminará toda la base avanzada a través de la API.

    Normalmente se desea eliminar nodos secundarios en virtud de ella, aunque, lo que usted hace con:

    ref.child(key).remove();
    • Usted puede llamar a eliminar() en la raíz de la base avanzada de la instancia mientras las reglas de seguridad lo permiten. Acabo de probar para estar seguro de que nada de pescado que está pasando aquí; funciona bien.
    • Woops… me Sirve para no probar. Voy a actualizar mi respuesta una vez que estoy en un mejor teclado de nuevo.
    • Lo que hace es quitar en ese caso? Todos los niños (de modo que todos los datos en de la aplicación)? O quitar la aplicación en sí, como cuando usted haga clic en «eliminar» de la base avanzada panel de control (firebase.com/account)?
    • ¿por qué es esta api no en el documento..
    • No admite una devolución de llamada?
  2. 13

    Espero que este código le ayudará a alguien – es de oficial de Google Firebase documentación:

    var adaRef = firebase.database().ref('users/ada');
    adaRef.remove()
      .then(function() {
        console.log("Remove succeeded.")
      })
      .catch(function(error) {
        console.log("Remove failed: " + error.message)
      });
    • Sí, este trabajo y proporcionar manera de hacer otras cosas cuando el éxito está por venir.
  3. 7

    Como otros han señalado la llamada a .remove() es asincrónica. Todos debemos ser conscientes de que no sucede nada ‘al instante’, incluso si es en la velocidad de la luz.

    Lo que significa ‘al instante’ es que la siguiente línea de código debe ser capaz de ejecutar después de la llamada a .remove(). Con las operaciones asincrónicas la siguiente línea puede ser cuando los datos se ha eliminado, puede no – es totalmente casualidad 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 lidiar con esta situación para llevar a cabo las operaciones después de saber que se ha completado la operación (con o sin un error). .push() toma dos parámetros, un valor y una devolución de llamada como .remove().

    Aquí está el ejemplo de código con las 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
    });
    • está usted SEGURO de que «//¿ telas» en el «error» de devolución de llamada?
    • hey @Cerberus – tbh ahora no estoy seguro. Dejé de usar fbase después de que google compra. plz editar la respuesta si su incorrecta, o referencia de la nueva documentación
    • hecho, pero es más como «tu colección» de «su base», que puede ser toda la base de todos modos… Saludos @DavidAnderton
    • esto es a lo que me refería… db.ref("your-base").push({key:val}, function(error){ console.log(error) /* should log 'null' if no errors */ }); elimina todos los datos empujado hasta el momento : db.ref("your-base").remove((err) => console.log(err)); // 'null' if no errors @david-anderton
  4. 7

    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
  5. 5

    Firebase.remove() como probablemente la mayoría de la base avanzada de los métodos es asincrónico, por lo tanto usted tiene que escuchar a los eventos para saber cuando algo sucedió:

    parent = ref.parent()
    parent.on('child_removed', function (snapshot) {
        //removed!
    })
    ref.remove()

    De acuerdo a la base avanzada de google docs se debe trabajar, incluso si se pierde la conexión de red. Si quieres saber cuando el cambio ha sido realmente sincronizado con la base avanzada de servidores, usted puede pasar a una función de devolución de llamada para Firebase.remove método:

    ref.remove(function (error) {
        if (!error) {
            //removed!
        }
    }
  6. 0

    En caso de que usted está usando axios y tratando a través de una llamada de servicio.

    URL: https://react-16-demo.firebaseio.com/
    Schema Name: todos
    Key: -Lhu8a0uoSRixdmECYPE
    
    axios.delete(`https://react-16-demo.firebaseio.com/todos/-Lhu8a0uoSRixdmECYPE.json`). then();

    puede ayudar.

Dejar respuesta

Please enter your comment!
Please enter your name here