БД в реальном времени: быстрое создание, а затем удаление узла - PullRequest
0 голосов
/ 27 октября 2018

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

  1. Пользователь нажимает кнопку закладки на странице элемента, затем приложение собирается создать узел
  2. Узел создан, и облачный функционал (слушатель) называется
  3. Пользователь нажимает на закладку btn, чтобы очистить ее, а затем приложение собирается удалить узел
  4. Узел удален
  5. Cloud func записывает текущую дату в узле (заново воссоздает узел)

DB слушатель:

exports.BookmarkCreated = functions.database.ref(pathBookmark).onCreate(event => {

const userUid = event.params.userUid;
const bookmarkUid = event.params.bookmarkUid;
var p = [];
// set date created for bookmark
const date = new Date();
const dateCreated = date.getTime();
var p1 = admin.database().ref(ROOT_STUFF_BOOKMARKS +"/"+ userUid +"/"+ bookmarkUid).child("dateCreated").set(dateCreated);
p.push(p1);
// add bookmark to index
const bookmark = event.data.val();
var stuffKey = bookmark.stuffKey;
var p2 = admin.database().ref(INDEX_STUFF_BOOKMARKS +"/"+ stuffKey).child(userUid).set(bookmarkUid);
p.push(p2);
return Promise.all(p);
});

1 Ответ

0 голосов
/ 27 октября 2018

Я могу придумать три основных варианта. В порядке убывания (личного) предпочтения это:

  1. Похоже, вы не хотите, чтобы приложение на самом деле создавало документ с закладками, вместо этого вы должны написать «запрос на создание закладки» в базу данных. Это будет в отдельной коллекции, например, bookmark_creation_requests. Затем ваша облачная функция запускает эти запросы и создает фактическую закладку, включая все необходимые данные. Этот подход чрезвычайно распространен для многих сценариев, например, если вы хотите отфильтровать определенные слова из чата, у вас будет очередь pending_messages.

  2. В качестве альтернативы можно убедиться, что закладка может быть удалена только после ее полного создания. Это можно сделать, проверив все поля в клиенте перед включением кнопки delete , а также проверив наличие всех полей в правилах безопасности.

  3. Последний вариант - использовать транзакцию для добавления метки времени к документу закладки и прервать транзакцию, если документ больше не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...