Доступ к данным пожарного депо в глобальном масштабе - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь получить доступ к данным пожарного магазина и отправить их в массив.Это очень просто, но по какой-то причине я не могу понять, почему это не работает:

var db = admin.firestore();

let arr = [];

var Ref = db.collection('Test').doc('Document');
var getDoc = Ref.get()
    .then(doc => {
       if (!doc.exists) {
         console.log('No such document!');
       } else {
          let data = doc.data().Name;
          arr.push(data);
       }
    })
    .catch(err => {
         console.log('Error getting document', err);
    });

 console.log(arr)  // expecting >>> ['Joe'] (ie: data that is in firestore object)

Почему arr не содержит объект пожарного депо?

Спасибо за помощь.

1 Ответ

0 голосов
/ 25 мая 2019

Он еще не содержит данных из хранилища . .

. get() работает асинхронно, возвращая обещание и затем продолжая выполнение программы.Следующая строка - console.log(arr), но arr еще не заполнена - она ​​заполняется после завершения Promise (вызывает часть then()).

Если вы используете достаточно современную версиюузла (узел 8 и выше, который вы должны использовать в данный момент), тогда вы можете использовать await, чтобы дождаться завершения асинхронной операции, прежде чем переходить к следующей строке.

У меня нетпротестировал его, но ваш код может выглядеть примерно так после переписывания:

doc = await Ref.get();
if (!doc.exists) {
  console.log('No such document!');
} else {
   let data = doc.data().Name;
   arr.push(data);
}

console.log(arr)

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

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