2017-08-10 22 views
0

當我使用相同的值替換節點的值時,是否可以在偵聽器中獲取事件?接縫如果火力點注意到價值是相同的沒有事件適應..:s使用相同的值替換節點時獲取事件?

+0

這是一個令人難以置信的廣泛問題。我在下面寫了一個答案,但不幸的是也必須同樣廣泛(並且有點理論上)。如果你想要一個更具體的答案,它可以幫助你分享[重現你的問題的最小代碼](http://stackoverflow.com/help/mcve)。 –

回答

1

Firebase數據庫同步客戶端之間的狀態。如果寫入操作不改變狀態,則沒有什麼可以同步到其他偵聽客戶端。

在簡單的代碼:

ref.setValue(1); 
ref.setValue(1); // won't trigger listeners 
ref.setValue(2); // will trigger active listeners 
ref.setValue(2); // won't trigger listeners 

這聽起來像你想客戶端之間,而不是傳遞消息。這是完全可行的,但意味着你應該對數據進行不同的建模。不是將值存儲在數據庫中,而是存儲客戶端寫入值的事實。

在簡單的代碼:

ref.push(1); 
ref.push(1); 
ref.push(2); 
ref.push(2); 

在這最後一個樣本的每個寫會引發聽衆的ref,因爲每個寫是新的。

這是一種常見模式:不是存儲最終狀態,而是存儲狀態更改。它基本上類似於數據庫和許多其他系統中oplog背後的機制。

1

因爲什麼也沒有發生沒有觸發的事件。你可以做什麼,而是在設定之前檢查價值。

if(myValue.equals(firebaseValue)) { 
    //do something 
} else { 
    //do something else 
} 

希望它有幫助。

+0

ty並沒有幫助完全是因爲它是一種將價值和客戶(移動)監聽放入結果的服務,即使值相同,我也希望通知服務已完成,並且它是一個新值(ofc通過創建帶有時間stemp的新節點或者隨着服務產生的soon變化而發生變化的東西 - 但是像'**:S中的痛苦「那樣的接縫,還有一種感覺,不過謝謝:) – pb4now