使用EmberFire,我尝试使用相关的数据集。在这种情况下,广告系列有许多玩家和玩家有很多广告系列。
当我想在广告系列中添加播放器时,我了解我可以将播放器对象推送到campaign.players,保存播放器,然后保存广告系列。这将更新两个记录,以便关联关系。这很好。
我的问题是关于如何在保存一个或两个记录时处理失败的假设。
例如,您将如何处理保存玩家记录成功的场合(从而在其广告系列字段中添加相应的广告系列ID),但保存广告系列则失败(因此无法将玩家添加到其玩家字段中)。看起来在这种情况下,你可以打开一些非常混乱的数据。
我正考虑拍摄快照"如果一个更新失败,那么两个记录的问题然后将它们重置为先前的状态,但这似乎会创建一些半噩梦代码。
思想?
答案 0 :(得分:0)
我猜你正在使用实时数据库。如果您使用具有不同路径的update()
方法,则只需调用update()
即可同时更新JSON树中的多个位置
以这种方式进行的同步更新是原子的:要么全部更新 成功或所有更新都失败。
来自文档:https://firebase.google.com/docs/database/web/read-and-write#update_specific_fields
因此,在您的情况下,您应该执行以下操作,但只要updates
对象保存所有同步更新,就可以进行许多变更:
var updates = {};
updates['/campaigns/players/' + newPlayerKey] = playerData;
updates['/players/campaigns/' + campaignKey] = "true";
return firebase.database().ref().update(updates);