Firebase добавил / удалил / изменил детского слушателя, используя Swift - PullRequest
0 голосов
/ 22 сентября 2019

Официальная Документация Firebase гласит:

ChildAdded

EventHandler ChildAdded

Событие возбужденокогда дочерние узлы добавляются относительно этого местоположения.

Зарегистрируйте обработчик, чтобы наблюдать, когда дочерние узлы добавляются относительно этого объекта Query.Каждый раз, когда добавляются дочерние узлы, ваш обработчик будет вызываться с неизменным снимком данных.

ChildRemoved

EventHandler ChildRemoved

Событие, возникающее при удалении дочерних узлов относительно этого местоположения.

Зарегистрируйте обработчик, чтобы наблюдать, когда дочерние узлы удаляются относительно этого объекта Query.Каждый раз, когда удаляются дочерние узлы, ваш обработчик будет вызываться с неизменным снимком данных.

ChildChanged

EventHandler ChildChanged

Событие, возникающее при изменении дочерних узлов относительно этого местоположения.

Зарегистрируйте обработчик для наблюдения за изменениями дочерних узлов относительно этого объекта Query.Каждый раз, когда дочерние узлы меняются, ваш обработчик будет вызываться с неизменным снимком данных.

До сих пор я успешно использую ChildRemoved и ChildAdded, и они работают бесперебойно и без проблем.Я делаю.В частности, эти два слушателя являются независимыми, то есть: действия, которые вызывают возгорание одного из них, гарантированно не вызывают возгорание другого.Поэтому мне не нужно выполнять какую-либо синхронизацию или планирование для разрешения конфликтов.

Мой вопрос: независимы ли эти три типа слушателей друг от друга?

То есть:

  1. Для любого данного действия я гарантирую, что один и не более одного из трех слушателей сработают.
  2. ТолькоChildAdded срабатывает, когда слушатель впервые установлен.Два других типа слушателей этого не делают.

Замечание о документации: это устранит неоднозначность, если в документации для ChildChanged будет указано, что означает «childChanged»: включает ли она добавление / удаление /Перемещение / редактирование дочернего элемента, или оно фокусируется только на редактировании существующего дочернего элемента?

1 Ответ

0 голосов
/ 22 сентября 2019

Каждое из этих событий является особым способом обработки синхронизации данных между клиентами.

  • .childChanged

    будет вызываться всякий раз, когда что-то меняется

Таким образом, если у вас есть база данных в реальном времени, подобная следующей:

/store/<random-number-inserted-by-firebase-1>/name/store-1
/store/<random-number-inserted-by-firebase-1>/location/street-1
/store/<random-number-inserted-by-firebase-1>/items/0/name/name-1
/store/<random-number-inserted-by-firebase-1>/items/0/type/type-1
/store/<random-number-inserted-by-firebase-1>/items/1/name/name-2
/store/<random-number-inserted-by-firebase-1>/items/1/type/type-2
/store/<random-number-inserted-by-firebase-2>/name/store-2
/store/<random-number-inserted-by-firebase-2>/location/street-2

Вы запускаете наблюдателей childAdded, childChanged и childRemoved в "/ store" вместе.

Если вы измените /store/<random-number-inserted-by-firebase-1>/items/0/type/type-1 на /store/<random-number-inserted-by-firebase-1>/items/0/type/new-type-1, ваша функция обратного вызова childChanged получит словарь ["random-number-inserted-by-firebase-1": ["name": "store-1", "location": "street-1", "items": [["name": "name-1", "type": "new-type-1"], ["name": "name-2", "type": "type-2"]] .childAdded прослушивает все, что изменяется в узле.

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