Как сохранить номер из запроса Firestore в переменной для дальнейшего использования? - PullRequest
0 голосов
/ 05 января 2019

Я хотел бы сохранить номер, который запрашиваю из документа в коллекции в firestore, и сохранить это число в локальной переменной в угловом компоненте, чтобы использовать его в других методах этого компонента.

Я уже пытался реализовать решение , предоставленное Ittu, но у меня это не сработало, поскольку я не понимал, где использовать Promise.all

это мой код:

var magNum: number;

docRef.ref.get().then(
  function(doc) {
  console.log("Document data:", doc.get('painPoint'));
  magNum = doc.get('painPoint');
});

console.log('number \n' + magNum);

Результат в консоли undefined, за исключением случаев, когда я помещаю его в функцию, например:

var magNum: number;

docRef.ref.get().then(
  function(doc) {
  console.log("Document data:", doc.get('painPoint'));
  magNum = doc.get('painPoint');
  console.log('number \n' + magNum);
});

тогда magNum будет 3 в консоли

1 Ответ

0 голосов
/ 05 января 2019

Вы должны узнать кое-что о функциях обратного вызова и обещаниях.

Посмотрите на ваш код:

var magNum: number;

docRef.ref.get().then(
  function(doc) {
  console.log("Document data:", doc.get('painPoint'));
  magNum = doc.get('painPoint');
});

console.log('number \n' + magNum);

Поток кода выглядит следующим образом:

  1. Вы объявляете переменную magNum как число
  2. Вы говорите: «получите документ из магазина, и если вы это сделали, ТО сохраните число painPoint в переменной magNum»
  3. Распечатайте мой magNum из пожарного магазина.

Но что действительно происходит, так это:

  1. Код объявляет новую переменную magNum как число
  2. Код начинает получать ваш документ из пожарного магазина ASYNC
  3. Код распечатывает ваш magNum (который не определен, потому что получение документа пожарного депо еще не завершено)
  4. Через некоторое время документ загружается, и вашей переменной magNum будет присвоено значение painPoint.

Consolusion : console.log('number \n' + magNum); будет вызываться перед строкой magNum = doc.get('painPoint');, и поэтому magNum равно undefined в консоли !

Вы можете использовать async / await :

async yourFunction(...){
    var magNum: number;

    var doc = await docRef.ref.get();
    magNum = doc.get('painPoint');

    console.log('number \n' + magNum); // output is the value of painPoint
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...