我将Firebase用于某些项目,并且非常喜欢该平台。
我偶然发现了一件我做不到的事情,并且想知道是否有任何方法可以实现它,或者是否存在另一种实现方法。
我要尝试做的是创建一个函数,以从Firebase数据库中检索最后X个条目,并将数据返回给调用函数。
像这样:
function getTwoLatestLocations()
{
var twoLocations;
myFirebaseRef.limitToLast(2).once('value', function (dataSnapshot) {
twoLocations = dataSnapshot.val();
}, function (errorObject) {
// code to handle read error
console.log("The read failed: " + errorObject.code);
});
return twoLocations;
}
然后像这样调用它:
function someCalcutationsWithTheTwoLastLocations()
{
var twoLastLocations = getTwoLatestLocations();
// Do some calculations
}
但是,您可能已经猜到对数据库引用的调用是异步的,因此返回对象始终是未定义的。
有没有办法优雅地做到这一点,以便我可以使方法分开?
PS当前,我所有的代码都在对数据库的调用内。丑陋的。
为了分离出代码,您需要传递一个回调:
function getTwoLatestLocations(callback)
{
var twoLocations;
myFirebaseRef.limitToLast(2).once('value', function (dataSnapshot) {
twoLocations = dataSnapshot.val();
callback(twoLocations);
}, function (errorObject) {
// code to handle read error
console.log("The read failed: " + errorObject.code);
});
}
然后像这样调用它:
function someCalcutationsWithTheTwoLastLocations()
{
getTwoLatestLocations(function(twoLocations) {
// Do some calculations
});
}
要记住的重要一点是,您不能等待异步加载的内容。
这已经涵盖了好几次了,其中包括以下相关问题列表中的最佳答案:处理函数中的异步调用(Firebase)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句