Использование синхронной логики было бы большим шагом назад.Наилучшим решением здесь было бы правильно использовать асинхронный шаблон и предоставить функцию обратного вызова для 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
.Я исправил это выше.