2017-09-04 87 views
-2

使用firebase和離子(打字稿)。firebase:修改數據時奇怪的行爲:重複

將新條目(使用推送)添加到集合(組)時會顯示大量臨時組。我使用on()方法訂閱了它們,並在數據更改時發佈事件。因此,每次我在數據庫中添加數據時,客戶端都會立即進行更改,而無需進行任何交互。

幾個截圖應該解釋更好的正在發生的事情:

前加入: before adding

加入一個組(test_2)後(之後直接navctrl.pop()): adding a group

強制刷新列表後,或者如果我加載羣組聊天並退出refresh

如果刪除裏面直接火力 'test_2': delete_wtf

那些 '重複' 中沒有一個是存在於數據庫中,僅客戶端。 添加後,所有重複項都是「有效」的,但不是在刪除後(因爲它已從firebase中刪除)。這隻發生在添加數據或刪除時,而不是初始化時。

我該如何預防?

+0

「問題尋求幫助調試(‘爲什麼不是這個代碼的工作?’)必須包括所期望的行爲,一個特定的問題或錯誤,並重現它在問題本身所需要的最短的代碼。問題沒有清楚的問題陳述對其他讀者無用。請參閱:[如何創建最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)。「 –

+0

@FrankvanPuffelen事情是,問題只是部分來自我的代碼:/只刪除後的流氓goups是一個錯誤(我沒有正確清除變量)。但是,重複項來自Firebase on()方法,該方法同時被稱爲多次,並添加並繞過變量的重置。 我是firebase的新手,我之前沒有發現這個問題,當我問我的問題導致這個混亂:/ – Niavart

回答

0

我發現與firebase(這是一個錯誤?)我需要在使用它之前關閉on()方法。不這樣做是多次觸發on()方法和我的subscribe(),繞過我的變量重置,導致重複。

我在on()之前加了一個off()方法,它解決了我的問題。

this.fireuser.child(firebase.auth().currentUser.uid).child('groups/').off(); 
this.fireuser.child(firebase.auth().currentUser.uid).child('groups/').on('value', (snapshot) => {...})