как записать данные в firebase на трех разных узлах в одном без закрытия контроллера представления

#ios #swift #firebase-realtime-database #database-schema

#iOS #swift #firebase-база данных в реальном времени #база данных-схема

Вопрос:

По сути, я проверяю, существуют ли какие-либо данные в базе данных firebase или не используются Database.database().reference().child(“users”).hasChild(“somename”) если у него есть это какое-то имя, тогда я хочу записать на три разных узла в firebase, т. е. на узел отправителя, на узел получателя и еще на один узел, я делаю это, вызывая

   Database.database().reference().child(“send).childbyautoid.servalue(somename: somevalue)
  Database.database().reference().child(“receiver”).child(“receiverid”).childbyautoid.setvalue(somename: somevalue)
  database.database.reference().child(“all”).childbyautoid.setvalue(somename: somevalue)
  

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

Ответ №1:

Вы можете выполнить несколько операций записи за один раз, используя обновление для нескольких местоположений. В вашем коде это выглядело бы примерно так:

 let rootRef = Database.database().reference()
let pushId = rootRef.childByAutoId().key
let updatedUserData = [
  "send/(pushId)/someName": someValue, 
  "receiver/(pushId)/someName": someValue,
  "receiver/(all)/someName": someValue
]
// Do a deep-path update
rootRef.updateChildValues(updatedUserData, withCompletionBlock: { (error, ref) -> Void in
    if (error) {
        print("Error updating data: (error.description)")
    }
})
  

Обработчик завершения также является местом, куда вы помещаете код, который должен выполняться по завершении записи.

Также смотрите:

Комментарии:

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