web-dev-qa-db-fra.com

Comment supprimer / supprimer des nœuds sur Firebase

J'utilise Firebase pour une application Web. Il est écrit en Javascript simple, sans aucune bibliothèque externe.

Je peux "Push" et récupérer des données avec '.on ("child_added")', mais '.remove ()' ne fonctionne pas comme il le devrait. Selon l'API,

"Firebase.remove () - Supprime les données de cet emplacement Firebase. Toutes les données des emplacements enfants seront également supprimées. L'effet de la suppression sera immédiatement visible."

Cependant, la suppression ne se produit pas immédiatement; seulement lorsque le script entier est terminé. J'ai besoin de supprimer puis d'utiliser l'arbre effacé immédiatement après.

Exemple de code:

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

Il y a un article similaire ici mais je n'utilise pas les bibliothèques Ember, et même si cela semble être une solution de contournement pour ce qui devrait être aussi simple que l'API l'explique être.

50
user3771957

Le problème est que vous appelez remove à la racine de votre Firebase:

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

Cela supprimera la totalité de Firebase via l'API.

Vous voudrez généralement supprimer des nœuds enfants spécifiques en dessous, ce que vous faites avec:

ref.child(key).remove();
86
Frank van Puffelen

J'espère que ce code aidera quelqu'un - il provient de documentation officielle 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)
  });
13
Ula

Pour supprimer un enregistrement.

 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
7
Gopakumar AP

Comme d'autres l'ont noté, l'appel à .remove() est asynchrone. Nous devrions tous être conscients que rien ne se passe 'instantanément' , même si c'est à la vitesse de la lumière.

Ce que vous entendez par "instantanément" est que la prochaine ligne de code devrait pouvoir être exécutée après l'appel à .remove(). Avec les opérations asynchrones, la ligne suivante peut apparaître lorsque les données ont été supprimées. Elle peut not - c'est totalement le hasard et le temps qui s'est écoulé.

.remove() prend pour un paramètre une fonction de rappel afin de traiter cette situation et d'effectuer des opérations après savoir que l'opération est terminée (avec ou sans erreur). .Push() prend deux paramètres, une valeur et un rappel, exactement comme .remove().

Voici votre exemple de code avec les modifications:

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
});
7
David Anderton

Firebase.remove() comme la plupart des méthodes Firebase est probablement asynchrone, vous devez donc écouter les événements pour savoir quand quelque chose s'est passé:

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

Selon les documents Firebase, cela devrait fonctionner même si vous perdez la connexion réseau. Si vous voulez savoir quand le changement a été réellement synchronisé avec les serveurs Firebase, vous pouvez transmettre une fonction de rappel à Firebase.remove méthode:

ref.remove(function (error) {
    if (!error) {
        // removed!
    }
}
5
szimek

Si vous utilisez axios et essayez via un appel de service.

URL: https://react-16-demo.firebaseio.com/
Schema Name: todos
Key: -Lhu8a0uoSRixdmECYPE

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

peut aider.

0
Ved Prakash