12 答案取決於他們如何修改數據。 set()(和remove,push,setWithPriority等)是last-write-wins。因此,如果客戶端A和客戶端B都「脫機」,然後再連接到Firebase,則如果客戶端A首先成功連接到Firebase,則其set()將寫入Firebase,但當客戶端B最終連接時,將覆蓋客戶端A的集合,因此客戶端B將最終獲勝。 transaction()內置衝突解決方案。因此,如果客戶A先連接到Firebase,那麼他的交易將在第一次嘗試時成功(因爲沒有衝突)。然後,當客戶端B連接時,他的交易將在第一次嘗試時失敗,因此他的交易更新功能將自動再次運行(現在在客戶端A先前寫入的新數據上),並且此新數據將寫入Firebase (假設沒有進一步的衝突)。 所以,如果你不在乎誰贏,使用set()。如果您需要通過沖突/合併解決方案確保某種一致性,請使用transaction()。 來源 2013-02-04 23:48:02