2014-08-27 74 views
0

以下代碼會產生無限循環的重複的child_added,儘管我從不添加孩子。節點被刪除。我只是永遠循環。我怎樣才能解決這個問題?爲什麼我要刪除child_added事件?

//notifications branch is pre-populated when I get here: 
notifications.startAt(null).on('child_added', processNotification, logError); 

function processNotification(notification) 
{ 
    removeNotification(notification); 
} 

function removeNotification(notification) 
{ 
    var child = notifications.child(notification.name()); 
    console.log("REMOVING", child.toString()); 
    child.remove();  
} 

我記錄是相同的四個節點(A,B,C,d)被移除:

REMOVING https://my.firebaseio.com/experimental/-JVMi0_4poXfOWUt5g49 - A 
REMOVING https://my.firebaseio.com/experimental/-JVMi1Y_bFwZAkffRel4 - B 
REMOVING https://my.firebaseio.com/experimental/-JVMi2lyhKj8z27ik71x - C 
REMOVING https://my.firebaseio.com/experimental/-JVMhzazdgHYAstqxu8L - D 
REMOVING https://my.firebaseio.com/experimental/-JVMi0_4poXfOWUt5g49 - A 
REMOVING https://my.firebaseio.com/experimental/-JVMi1Y_bFwZAkffRel4 - B 
REMOVING https://my.firebaseio.com/experimental/-JVMi2lyhKj8z27ik71x - C 
REMOVING https://mu.firebaseio.com/experimental/-JVMhzazdgHYAstqxu8L - D 
... 
+0

當你用var child = notification.ref()替換'var child = notifications.child(notification.name());'' – 2014-08-27 17:34:31

+0

呃,這個問題是回調的不是引用。刪除發生。如果它有效,我不會看到這怎麼重要。你的想法是什麼? – user9170 2014-08-27 17:43:40

+0

我的推理是它看起來很複雜,我沒有時間重現這個問題。或者,您也可以查看https://github.com/firebase/firebase-work-queue,它可以做類似於您嘗試的操作。他們使用返回null的'transaction'處理程序來移除那裏的處理項目。 – 2014-08-27 18:29:46

回答

1

最終,我只是放棄了查詢,並與正常加工去了,去掉了「startAt(空)」:

notifications.on('child_added', processNotification, logError); 

這不是明顯的行爲將是從文檔不同,但startAt( null)不會產生相同的行爲(儘管在它應該)。我很樂意看到這更好的記錄。

1

我能夠重現該問題。我認爲這是由於Query在刪除某個項目時試圖將項目保留在其「窗口」中造成的。

可以解決此問題通過使用once('value'代替on('child_added',像這樣:

notifications.startAt(null).once('value', processNotifications); 

function processNotifications(notifications) 
{ 
    notifications.forEach(function(notification) { 
     notification.ref().remove(); 
    }); 
} 

由於value只觸發once,它不會與remove操作干擾。

+0

我也可以通過將查詢全部放在一起來修復它: – user9170 2014-08-29 15:16:30

+0

這是我首選的工作方式。查詢似乎很強大,但它們有時是違反直覺的。你能用解決方案發表答案並接受嗎?這樣別人就知道你是如何解決它的。 – 2014-08-29 15:29:17

相關問題