功能

时间:2016-05-31 03:30:37

标签: javascript firebase firebase-realtime-database

我是firebase的新手,我试图在函数中传递$variable来检查$variable是否存在。

function ifExistWaybillNo(waybill_no)
{
  var databaseRef = firebase.database().ref('masterlist');
  databaseRef.orderByChild("waybill_no").equalTo(waybill_no).on('value', function(snapshot){
    alert(snapshot.exists()); //Alert true or false
  });
}

上述功能很好但是当我将alert(snapshot.exists());更改为return snapshot.exists();时,它无法正常工作。它只返回undefined,它应返回truefalse.

我该怎么做?提前谢谢

1 个答案:

答案 0 :(得分:2)

Firebase所做的几乎所有事情都是异步的。当你调用函数ifExistWaybillNo时,它期望立即返回,而不是等待。因此,在databaseRef.orderByChild("waybill_no")完成之前,调用该函数的语句已经确定返回为undefined

解决此问题的方法是传递回调函数并在那里使用返回。这方面的确切解释非常好:return async call

您只需重命名一些函数并遵循其中使用的语法。

开始:

function(waybill_no, callback) { 
    databaseRef.orderByChild("waybill_no").equalTo(waybill_no).on('value', function(snapshot) {
    var truth = snapshot.exists();
    callback(truth); // this will "return" your value to the original caller
  });
}

记住,几乎所有Firebase都是异步的。