Извлечение детей от детей на огненной базе с ионной

0

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

Это упрощенная версия моей структуры firebase:

"posts_meta" : {

   "uid" : {

     "post-id" : {
        "title": "",
        "content": ""
     },
   },

   "uid" : {

     "post-id" : {
        "title": "",
        "content": ""
     },
     "post-id" : {
        "title": "",
        "content": ""
     },
   }

И здесь я пытаюсь сначала пропустить пользователей, а затем пропустить записи для каждого пользователя, используя вложенный foreach:

.factory('Timeline', function($q, Profile, Utils, Codes) {

var self = this;

self.getAllPosts = function() {
    var qGet = $q.defer();
    var ref = new Firebase(FBURL);

    ref.child("posts_meta").once("value", function(snapshot) {

        snapshot.forEach(function(childSnapshot) {

            childSnapshot.forEach(function(grandchildSnapshot) {
                qGet.resolve(grandchildSnapshot.val());
            })
        })
}, function (error) {
        Codes.handleError(error);
        qGet.reject(error);
    });
    return qGet.promise;
};

Что я делаю не так? Я что-то упускаю?

Теги:
firebase
ionic-framework
firebase-realtime-database

1 ответ

1
Лучший ответ

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

Вы можете попробовать сохранить все granchils в массив, но я считаю, что у firebase есть способы решить эту проблему с лучшей производительностью.

    var values = [];

    snapshot.forEach(function(childSnapshot) {

        childSnapshot.forEach(function(grandchildSnapshot) {
            values.push(grandchildSnapshot);

        })
     })
     promise.resolve(values)
  • 0
    Спасибо вам большое! Это решило мою проблему. Стоит отметить, что сначала я не получал данные правильно, но после изменения следующей строки он работал отлично: values.push (grandchildSnapshot); в values.push (grandchildSnapshot.val ());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню