【发布时间】:2012-07-23 02:48:56
【问题描述】:
现在我多次遇到使用 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()是一个异步调用,所以当我们到达return velocity;时,velocity还没有被设置。如果我们将return 放在.on() 回调函数中,则根本不会返回任何内容。
一种解决方案是让我的 calcVelocity() 函数也异步。
另一种解决方案是存储 Firebase 的缓存版本,该版本同步读取但从 Firebase 异步更新。
其中一种解决方案是否比另一种更好?有没有更好的解决方案?
【问题讨论】:
-
JavaScript asynchronous return value / assignment with jQuery 的可能重复项——是的,让
calcVelocity接受回调或返回延迟对象。
标签: javascript ajax asynchronous firebase