Подтвердить что ты не робот

Как удалить/удалить узлы на Firebase

Я использую Firebase для веб-приложения. Он написан на простом Javascript, не используя внешние библиотеки.

Я могу "нажимать" и извлекать данные с помощью .on( "child_added" ), но ".remove()" не работает так, как он говорит. Согласно API,

"Firebase.remove() - Удалите данные в этом местоположении Firebase. Любые данные в дочерних местах также будут удалены. Эффект удаления будет сразу виден."

Однако удаление происходит не сразу; только когда выполняется весь script. Мне нужно удалить, а затем использовать очищенное дерево сразу после.

Пример кода:

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

Существует аналогичная запись здесь, но я не использую библиотеки Ember, и даже поэтому это похоже на обходное решение для того, что должно быть так просто, как объясняет API быть.

4b9b3361

Ответ 1

Проблема в том, что вы вызываете remove в корне вашей Firebase:

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

Это удалит весь Firebase через API.

Вы, как правило, хотите удалить определенные дочерние узлы под ним, что вы делаете с:

ref.child(key).remove();

Ответ 2

Надеюсь, этот код кому-нибудь поможет - он из официальной документации 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)
  });

Ответ 3

Как отмечали другие, вызов .remove() является асинхронным. Мы все должны знать, что ничего не происходит "мгновенно", даже если оно находится со скоростью света.

Что вы подразумеваете под "мгновенно", так это то, что следующая строка кода должна быть выполнена после вызова .remove(). При асинхронных операциях следующая строка может быть, когда данные были удалены, она может не - она ​​полностью не имеет шансов и времени, которое истекло.

.remove() принимает один параметр функцию обратного вызова, чтобы помочь справиться с этой ситуацией для выполнения операций после того, как мы знаем, что операция завершена (с ошибкой или без нее). .push() принимает два параметра, значение и обратный вызов точно так же, как .remove().

Вот ваш пример кода с изменениями:

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

Ответ 4

Чтобы удалить запись.

 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

Firebase.remove() как и, вероятно, большинство методов Firebase, является асинхронным, поэтому вы должны прослушивать события, чтобы знать, когда что-то произошло:

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

Согласно документации Firebase, она должна работать, даже если вы потеряете соединение с сетью. Если вы хотите узнать, когда изменение было фактически синхронизировано с серверами Firebase, вы можете передать функцию обратного вызова методу Firebase.remove:

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

Ответ 6

В случае, если вы используете axios и пытаетесь через сервисный звонок.

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

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

может помочь.