使用EmberFire,我正在尝试处理相关的数据集。在这种情况下,一个Campaign有许多玩家,玩家有多个Campaign。
当我想要向campaign添加一个玩家时,我知道我可以将player对象推送到campaign.players,保存该播放器,然后保存该活动。这将更新这两个记录,以便巩固关系。这可以很好地工作。
我的问题是关于在保存一个或两个记录时如何处理失败的假设。
例如,如果保存玩家记录成功(从而将相应的活动ID添加到其campaign字段中),但保存活动失败(因此无法将玩家添加到其player字段中),您将如何处理这种情况?看起来,在这种情况下,您可能会遇到一些非常混乱的数据。
我正在考虑拍摄两个记录的“快照”,如果一个更新失败,然后将它们重置为以前的状态,但这似乎会创建一些半噩梦般的代码。
有什么想法?
发布于 2018-06-05 05:01:17
我猜您使用的是实时数据库。如果使用具有不同路径的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);https://stackoverflow.com/questions/50688433
复制相似问题