现在有几次我遇到了使用 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()是异步调用,所以velocity我们到达时还没有设置return velocity;。如果我们将return放在.on()回调函数内部,则根本不会返回任何内容。
一种解决方案是使我的calcVelocity()函数也异步。
另一种解决方案是存储 Firebase 的缓存版本,该版本从 Firebase 同步读取但异步更新。
这些解决方案中的一个比另一个更好吗?有没有更好的解决方案?