2013-04-20 32 views
2

我正在運行一個事務來更新需要存儲在兩個鍵中的項目。要做到這一點,我已經建立了嵌套事務如下,似乎如預期運行:Firebase中嵌套事務的影響?

firebaseOOO.child('relationships/main').child(accountID).child(friendAccountID).transaction(function(data) { 
    data.prop = 'newval'; 
    firebaseOOO.child('relationships/main').child(friendAccountID).child(accountID).transaction(function(data) { 
     return r; 
    }); 
    return r; 
}); 

是否有任何陷阱或可能的意外影響到這一點?我最擔心的是在負載下陷入某種事務循環,其中每個事務都會取消另一個事務,迫使它們重新啓動或類似。

有沒有更好的方法來做到這一點?

我正在使用NodeJS客戶端。

+0

爲什麼不嘗試多位置更新? - https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html – Badie 2018-03-04 21:40:40

回答

4

您可能不想從回調中的第一個事務開始另一個事務。無法保證您的第一筆交易的運行次數有多少次,特別是當您嘗試更新的地點存在大量爭用時。

一個更好的解決方案,我相信你在另一個問題中遇到了,就是在檢查完第一個提交後,從完成回調中啓動第二個事務。

+0

不錯的解決方案,但這會使數據庫處於不一致的狀態。如果有人在第一筆交易結束但第二筆交易尚未完成時正在讀取數據呢? 是否有任何解決方案將事務添加到updateChild函數的原子函數中。 – 2016-12-26 13:33:13