добавление элементов в массив и возвращение значения после цикла forEach - PullRequest
0 голосов
/ 18 апреля 2019

Я должен получить доступ к коллекции «последователи» для мобильного пользователя, которая содержит идентификатор подписчика.Используя этот идентификатор, я должен получить данные о подписчике из коллекции mobile_user и добавить их в массив.Я могу успешно перебрать список документов, но при использовании push создается впечатление, что я не могу вернуть полный список данных обратно из цикла for.

Посмотрите на мой текущий код:

Обратите внимание на два журнала консоли: в первом я вижу, как массив заполняется необходимой мне информацией, во втором массив возвращается пустым.Я определенно пропускаю все, что нужно для массива, который будет возвращен из цикла for.Я довольно новичок в JS, и любые советы в правильном направлении будут оценены.

const getFollowers = (data, context) => { 
    let id = data.id 
    const mobileUserRef = db.collection('mobile_user')

    return mobileUserRef.doc(id).collection('followers')
    .get()
    .then(function(doc) { 
        var result = []
         doc.forEach(function(follower) { 
            mobileUserRef.doc(follower.id).get()
            .then(function(followerdoc) { 
                result.push({
                    name: followerdoc.data().name
                })
                console.log(result)
            })
        })
        console.log(result)
        return result 
    })
  }

1 Ответ

1 голос
/ 18 апреля 2019

mobileUserRef.doc(follower.id).get() является асинхронным и немедленно возвращается с обещанием. Цикл forEach не будет ждать разрешения этого обещания, прежде чем перейти к снимку в списке. Вместо этого вы должны поместить это обещание в массив, а затем использовать Promise.all для этого массива, чтобы дождаться завершения всех операций перед продолжением. Затем вам нужно будет повторить каждый из этих результатов и поместить их в другой массив, чтобы передать вызывающему.

Смотри также:

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