[英]running functions synchronously in firebase
我正在尝试调用一个函数来从“子产品”表中获取一个值并将其插入到另一个表中。 但是,我返回的值不是从表中获取最新值,它甚至在函数的快照部分执行之前就已返回。 我希望它同步运行。 有没有更好的写法。
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());
任何帮助,将不胜感激
使用同步逻辑将是一个很大的倒退。 这里最好的解决方案是正确使用异步模式,并为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...
});
另一种选择是从getGSTvalues()
返回SubProductRef
的承诺,并在调用范围内对其应用then()
,尽管这会使函数在很大程度上变得多余。
另请注意,JS 区分大小写,因此gstVar
与gstvar
。 我在上面更正了这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.