Перевести значение переменной из блока в глобальную область (в FIRESTORE) - PullRequest
0 голосов
/ 27 февраля 2020

Я создаю приложение в Firebase, используя FireStore в качестве базы данных.

В приведенном ниже коде я создаю переменную order и присваиваю ей значение 1.

Затем я обновляю значение до номера 4 и console.log, чтобы проверить. Что получается нормально.

Но когда я записываю переменную после функции, она возвращает 1 снова вместо обновленного значения.

Это мой код (сделать См. // комментарии)

    console.log("Value initiated : " + order); // logs 'Value initiated : 1'

    //A function that gets another value from the FireStore Database and assigns it to the variable.
    function getField() {
      db.collection("index")
        .doc("artNum")
        .get()
        .then(function(doc) {
          order = doc.data().artNum; //I reassign the variable to '4' here.
          console.log("Value assigned : " + order); // logs 'Value assigned : 4'
        })
        .catch(err => {
          console.log(err);
        });
    }

    getField(); 
    console.log("Updated Value : " + order); // logs " Updated Value : 1 " but should be equal to 4 

Пожалуйста, помогите мне с тем, что я делаю неправильно или что отсутствует этот код.

1 Ответ

0 голосов
/ 27 февраля 2020

Вы можете просто сделать window.order = yourValue (замените window на global, если вы находитесь в узле), чтобы создать глобальную переменную order.

Вы также должны понимать, что ваш код асинхронный , что означает, что обновления будут происходить после вызова вашей getField функции. Поэтому поиск нового значения не сработает. Однако ваша getFields функция возвращает Promise, который всегда выполняется (благодаря вашему предложению catch).

Так что это должно работать

console.log("Value initiated : " + order); // logs 'Value initiated : 1'

//A function that gets another value from the FireStore Database and assigns it to the variable.
function getField() {
  return db.collection("index")
    .doc("artNum")
    .get()
    .then(function(doc) {
      order = doc.data().artNum; //I reassign the variable to '4' here.
      console.log("Value assigned : " + order); // logs 'Value assigned : 4'
    })
    .catch(err => {
      console.log(err);
    });
}

getField().then(() => console.log("Updated value", order)); 
...