выбрать внутри l oop в базе? - PullRequest
1 голос
/ 04 мая 2020

Я знаю, что в mysql нам нужно избегать выбора внутри l oop.

Мне нужно получить данные из базы Firebase, из 2 "таблиц", и я делаю это:

// first get post ids from feed:
var feedRef = firebase.database().ref().child('Feed').child("-idownner").limitToLast(10);

feedRef.once('value', async function(snapshot) {

            snapshot.forEach((subChild) => { // start the loop

                var value = subChild.val();
                value = value.postID;

                //inside foreach loop select from posts: <<<---------------
                var post = firebase.database().ref('/posts/' + value).orderByKey();

                promises.push(new Promise((res, rej) => {
                    post.once('value', function(snapshot2) {
                        var obj = Object.assign(snapshot2.val(), { key: snapshot2.key });
                        res(obj);
                    });
                }));
            });

мой вопрос здесь, правильно ли мое "присоединиться"? Могу ли я "выбрать" внутри l oop в FireBase, как это? если это не так, есть ли другой способ получить эти данные?

спасибо.

1 Ответ

1 голос
/ 04 мая 2020

Да, вложение загрузки элементов из второй таблицы - это нормальный способ объединения на стороне клиента с Firebase. Но вам не нужно создавать свое собственное обещание, поскольку once() уже возвращает обещание.

Так что вы можете упростить его до чего-то вроде:

promises.push(
    post.once('value').then((snapshot2) => Object.assign(snapshot2.val(), { key: snapshot2.key })
);

I ' Я не совсем уверен, что должен делать Object.assign, но подозреваю, что вы можете упростить это до:

promises.push(
    post.once('value').then((snapshot2) => { ...snapshot2.val(), key: snapshot2.key })
);
...