javascript – 在函数中处理异步调用(Firebase)

前端之家收集整理的这篇文章主要介绍了javascript – 在函数中处理异步调用(Firebase)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
现在有几次我遇到了一个同步&使用Firebase的异步功能.我的问题是,我需要在我写的一个函数中进行异步Firebase调用.作为一个简单的例子,假设我需要计算&显示对象的速度,而我的Firebase存储距离&时间:
function calcVelocity() {
    var distance,time,velocity;

    firebaseRef.once('value',function(snapshot) {
        distance = snapshot.val().distance;
        time = snapshot.val().time;

        velocity = distance / time;
    });
    return velocity;
}

$("#velocity").html(calcVelocity());

当然,上面的代码将不会工作,因为firebaseRef.once()是一个异步调用,所以当我们达到返回速度时,还没有设置速度.如果我们把返回值放在.on()回调函数中,那么根本没有返回任何东西.

一个解决方案是使我的calcVelocity()函数也是异步的.

另一个解决方案是存储同步读取但从Firebase异步更新的Firebase缓存版本.

这些解决方案之一比其他解决方案好吗?还有更好的解决方案吗?

解决方法

您确定了两种可能性:也可以使您的功能异步,或缓存最新的Firebase数据,以便您可以同步访问它.考虑到您正在撰写的应用程序的上下文,您使用的是只是一个偏好和方便的问题.

例如,我们已经注意到,“动作游戏”通常由严格的渲染循环驱动,而不是由firebase数据更改事件驱动.因此,缓存用于渲染循环的最新Firebase数据是有意义的.例如:

var latestSnapshot = null;
firebaseRef.on('value',function(snap) { latestSnapshot = snap; });

然后,您可以在render循环(或任何其他地方)中同步使用latestSnapshot,尽管在第一个firebase回调发生之前,您需要小心处理它为null.

猜你在找的JavaScript相关文章