вставить много записей внутри foreach - добавляется только последняя - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь скопировать записи из одной «таблицы» в другую в firebase.

// copy posts to feed
var recentPostsRef = firebase.database().ref('user-posts').child(pid).limitToLast(10);
recentPostsRef.once('value', async function(snapshot) {

    snapshot.forEach((subChild) => {
        var value = subChild.val();

        var key = Object.keys(snapshot.val())[0];

        var postData = {
            postID: key,
            user: pid
        };

        var updates2 = {};
        updates2['/feed/' + userID + '/' + key] = postData;

        firebase.database().ref().update(updates2);

    });

});

Итак, я получаю сообщения от user-posts и пытаюсь скопировать последние 10 в feed. Он работает, но только для 1 записи. Есть идеи, почему и как копировать все записи вместо одной?

Ответы [ 2 ]

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

Я думаю, вы пытаетесь это сделать:

var recentPostsRef = firebase.database().ref('user-posts').child(pid).limitToLast(10);
recentPostsRef.once('value', async function(snapshot) {

    var updates2 = {};
    snapshot.forEach((subChild) => {
        var key = subChild.key;

        var postData = {
            postID: key,
            user: pid
        };

        updates2['/feed/' + userID + '/' + key] = postData;
    });

    firebase.database().ref().update(updates2);
});

Внесенные мной изменения:

  • Получить ключ от subChild.key, а не через более сложный поиск.
  • Переместите вызов update(...) за пределы l oop, чтобы вы выполняли запись в базу данных только один раз для всех 10 элементов.
  • Поскольку вы не использовали value, я удалил эту переменную.

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

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

Попробуйте это, возможно?

snapshot.forEach((subChild, index) => {
                var value = subChild.val();

                var key = Object.keys(snapshot.val())[index];

                var postData = {
                    postID: key,
                    user: pid
                };

                var updates2 = {};
                updates2['/feed/' + userID + '/' + key] = postData;

                firebase.database().ref().update(updates2);

            });

Вы продолжаете повторно использовать один и тот же индекс (0) для каждого l oop.

Вы уверены, что это правильно? var key = Object.keys(snapshot.val())[index];

Разве не должно быть что-то вроде: var key = Object.keys(subChild.val())[index];?

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