2016-05-31 89 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