Почему для запросов к базе данных Firebase в реальном времени требуется слушатель? - PullRequest
0 голосов
/ 04 ноября 2019

Я новичок в базах данных Firebase и NoSQL. Я читал документы и смотрел учебные видео, но есть одна концепция, которую я не совсем понял.

Почему для запроса к базе данных требуется прослушиватель, например .on ("value")?

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

ref.orderBy("age"). equalTo(30).get()

Метод, позволяющий просто получить то, что есть во время выполнения инструкции, без необходимости прослушивания какого-либо события?

В SQL это не так, как у васждать, пока что-то изменится в вашей БД, чтобы этот запрос работал:

SELECT * FROM TABLE WHERE X == Y

PS: я знаю, что .once () также существует, но мой вопрос больше о том, что если моя БД никогда не менялась, как быЯ могу запросить его и всегда получать один и тот же результат запроса / снимок?

1 Ответ

1 голос
/ 04 ноября 2019

Вы не определили платформу, поэтому я буду использовать этот пример псевдокода Swift. Предположим, что мы хотим получить список всех пользователей, один раз.

let usersRef = my_firebase.child("users")
usersRef.observeSingleEvent(by: .value, with: { snapshot in
    //all users are returned to the app in the snapshot
    //   .value means 'give me everything in the specified node'
    // so then we can iterate over the snapshot to get each users data
}

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

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

let usersRef = my_firebase.child("users")
usersRef.observe(by: .childAdded, with: { snapshot in
    //upon first calling this, each user will be sent to the app in the snapshot
    //  and after that, any user that's added
}

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

Обратите внимание на использование .observeSingleEvent против .observe и .value, чтобы получить все в узле, против .childAdded для получения определенногоузел.

...