【问题标题】:running functions synchronously in firebase在firebase中同步运行函数
【发布时间】:2019-03-21 09:48:45
【问题描述】:

我正在尝试调用一个函数以从“子产品”表中获取值并将其插入到另一个表中。但是,我返回的值不是从表中获取最新值,甚至在函数的快照部分执行之前它就被返回了。我希望它同步运行。有没有更好的写法。

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());

任何帮助将不胜感激

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    使用同步逻辑将是一大退步。这里最好的解决方案是正确使用异步模式并向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...
    });
    

    另一种选择是从SubProductRefgetGSTvalues() 返回承诺,并在调用范围内应用then(),尽管这会使函数在很大程度上是多余的。

    另请注意,JS 区分大小写,因此gstVargstvar 不同。我在上面更正了这一点。

    【讨论】:

      猜你喜欢
      • 2019-10-11
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多