синхронное выполнение функций в FireBase - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь вызвать функцию, чтобы получить значение из таблицы «subproduct» и вставить его в другую таблицу.Однако возвращаемое мною значение не извлекает последнее значение из таблицы, и оно возвращается даже до того, как исполняется часть снимка функции.Я хочу, чтобы он работал синхронно.Есть ли лучший способ, которым это может быть написано.

function getGSTvalues(para1) {
  var gstVar = 1;
  var gstVarPromise = SubProductRef.once("value").then(function(snapshot) {
    snapshot.forEach(function(child) {
      if (para1 == child.val().subproductName) {
        gstvar = child.val().gst;
        console.log("InsidePromise" + gstVar);
      }
    });
    console.log("outside fun : " + gstVar);
  });
  console.log("outside fun1 : " + gstVar);
  return gstVar;
};

Вот где я вызываю вышеуказанную функцию:

var gstans = getGSTvalues($('#edit_ProductSubType').val());

Любая помощь будет оценена

1 Ответ

1 голос
/ 21 марта 2019

Использование синхронной логики было бы большим шагом назад.Наилучшим решением здесь было бы правильно использовать асинхронный шаблон и предоставить функцию обратного вызова для getGSTvalues(), которая выполняется после завершения асинхронной операции и получает результат в качестве аргумента.Попробуйте это:

function getGSTvalues(para1, cb) {
  var gstVar = 1;
  var gstVarPromise = SubProductRef.once("value").then(function(snapshot) {
    snapshot.forEach(function(child) {
      if (para1 == child.val().subproductName) {
        gstVar = child.val().gst;
      }
    });

    cb && cb(gstVar);
  });
};

getGSTvalues($('#edit_ProductSubType').val(), function(gst) {
  console.log(gst);
  // work with the value here...
});

Другой вариант - вернуть обещание от SubProductRef из getGSTvalues() и применить then() к нему в области вызова, хотя это сделает функцию в значительной степени избыточной.

Также обратите внимание, что JS чувствителен к регистру, поэтому gstVar отличается от gstvar.Я исправил это выше.

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