получить асинхронное значение из ссылки на пожарную базу Firebase - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь получить значение имени из этого обещания из базы данных firebase firestore:

(что касается информации, у меня есть коллекция мест, в которой есть место, содержащее имя, и ownerReference, которое ссылается на документ владельца, содержащий только имя.)

var names: any = [];
this.props.places.snapshot.docs.forEach((doc : any) => {
  const place = doc.data()
  place.ownerReference.get().then((snap : any) => {
    name.push(snap.data().name);
    console.log(names);
  })
});
console.log(names);

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

1 Ответ

0 голосов
/ 27 июня 2018

Соберите все обещания от каждого get() в массив, затем используйте Promise.all (), чтобы дождаться, пока они все не будут выполнены. Повторяйте полученные снимки в обратном вызове после этого.

const promises = []
this.props.places.snapshot.docs.forEach((doc : any) => {
    const place = doc.data()
    promises.push(place.ownerReference.get())
})

Promise.all(promises).then(snapshots => {
    const names = []
    snapshots.forEach(snapshot => {
        names.push(snapshot.data().name)
    })
    console.log(names);  // this prints what you want
})
...