EmberFire Отношения Устойчивость - PullRequest
0 голосов
/ 04 июня 2018

Используя EmberFire, я пытаюсь работать со связанными наборами данных.В этом случае в Кампании есть много игроков, а у игроков много кампаний.

Когда я хочу добавить игрока в кампанию, я понимаю, что я могу передать объект игрока в кампанию campaign.players, сохранить игрока изатем сохраните кампанию.Это обновит обе записи, так что связь будет цементирована.Это работает нормально.

Мой вопрос является гипотетическим о том, как обрабатывать сбои при сохранении одной или обеих записей.

Например, как бы вы справились со случаем, когда запись проигрывателя прошла успешно (таким образом,добавив соответствующий идентификатор кампании в поле своих кампаний), но затем сохранить кампанию не удалось (таким образом, не удалось добавить игрока в поле своих игроков).Похоже, что в этом случае вы бы открыли себя для возможности некоторых очень запутанных данных.

Я подумывал сделать «снимок» обеих рассматриваемых записей, а затем сбросить их в их прежние состояния, если одинобновление завершается неудачно, но создается впечатление, что он собирается создать какой-нибудь полумрачный код.

Мысли?

1 Ответ

0 голосов
/ 05 июня 2018

Я полагаю, вы используете базу данных в реальном времени.Если вы используете метод update() с разными путями ", вы можете выполнять одновременное обновление нескольких местоположений в дереве JSON с помощью одного вызова update()"

Одновременные обновления сделаны таким образоматомарны: либо все обновления выполнены успешно, либо все обновления не выполнены.

Из документации: 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);
...