簡體   English   中英

從 Firebase 數據庫中刪除子項后獲取新列表

[英]Getting the new list after child is removed from Firebase Database

child_removed的文檔指出,傳遞到回調中的DataSnapshot將是被刪除的孩子的舊數據。

我通過在代碼的另一部分調用push來填充我的數據庫。 在這里,我想在頂部的子項被刪除后訪問數據庫頂部的下一個值。 這就是我嘗試這樣做的方式,但它不起作用。

var ref = firebase.database().ref("Windsor boyss").limitToFirst(1);
    ref.on("child_removed", function(snapshot) {
        ref.once("value", function(snapshot) {
            snapshot.forEach(function(childSnapshot) {
                console.log("Child is ", childSnapshot.val);
            });
        });
    }); 

例如,當刪除用戶名為 javedh 的孩子時,應觸發 EventListener 並打印Child is tjaved因為這是刪除頂部孩子后數據庫頂部的值。

在此處輸入圖片說明

誰能幫我想出一個有效的解決方案? 謝謝!

正如 Doug 評論的那樣,在同一個引用上使用嵌套偵聽器是非常不尋常的。

使用on("value"的慣用方式,例如:

var ref = firebase.database().ref("Windsor boyss").limitToFirst(1);
ref.on("value", function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
        console.log("Child is ", childSnapshot.val);
    });
}); 

更新:我認為問題可能來自這樣一個事實,即您的ref.once("value"是從快照的本地(內存中)緩存提供的,因為該點不包含任何數據。

我能夠通過創建一個新的查詢來在回調中偵聽,而不是偵聽相同的查詢(您稱之為ref )來解決它:

var ref = firebase.database().ref("Windsor boyss");
var query = ref.limitToFirst(1);
query.on("child_removed", function(snapshot) {
  console.log("Child "+snapshot.val()+" was removed");
  ref.limitToFirst(1).once("value", function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
      console.log("First child is "+childSnapshot.val());
    });
  });
}); 

有關完整的工作測試床,請參閱: https : //jsbin.com/feqojey/edit? js, console

請注意,您在循環中的val() ()之后缺少() ,但這不是問題的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM