2016-05-31 43 views
3

我是firebase的新成员,我试图在函数中传递$variable以检查$variable是否存在。来自功能的Firebase返回输出

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

几乎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 
    }); 
} 

记住,几乎所有火力地堡是异步的。

+0

我会记住这一点,非常感谢。 –

+0

没问题,开心编码。 – theblindprophet