web-dev-qa-db-ja.com

Firebaseでノードを削除/削除する方法

WebアプリにFirebaseを使用しています。外部ライブラリを使用せずにプレーンなJavaScriptで記述されています。

'.on( "child_added")'を使用してデータを「プッシュ」および取得できますが、「。remove()」は意図したとおりに動作しません。 APIによると、

「Firebase.remove()-このFirebaseロケーションのデータを削除します。子ロケーションのデータもすべて削除されます。削除の効果はすぐに表示されます。」

ただし、削除はすぐには行われません。スクリプト全体の実行が完了した場合のみ。削除したツリーをすぐに削除して使用する必要があります。

サンプルコード:

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

同様の投稿があります here しかし、私はEmberライブラリを使用していません。

50
user3771957

問題は、Firebaseのルートでremoveを呼び出すことです。

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

これにより、APIを通じてFirebase全体が削除されます。

ただし、通常、その下の特定の子ノードを削除する必要があります。

ref.child(key).remove();
86

このコードが誰かを助けることを願っています-それは 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

レコードを削除します。

 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

他の人が指摘したように、.remove()への呼び出しは非同期です。私たちは皆、光速であっても何も起こらないことに気づくべきです 'instantly'

'instantly'とは、.remove()の呼び出し後に次のコード行を実行できることを意味します。非同期操作の場合、次の行はデータが削除されたときである可能性があります。not-偶然と経過した時間が完全にダウンしている可能性があります。

.remove()は、コールバック関数の1つのパラメーターを取り、操作が完了したことをknow(エラーの有無にかかわらず)の後に操作を実行するためにこの状況に対処するのに役立ちます。 .Push()は、.remove()と同様に、値とコールバックの2つのパラメーターを取ります。

変更したサンプルコードを次に示します。

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メソッドと同様にFirebase.remove()は非同期であるため、何かがいつ発生したかを知るためにイベントをリッスンする必要があります。

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

Firebaseのドキュメントによると、ネットワーク接続が失われても動作するはずです。 Firebaseサーバーと実際に変更が同期されたことを知りたい場合は、コールバック関数をFirebase.removeメソッドに渡すことができます。

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

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

助けられる。

0
Ved Prakash