不仅仅是Firebase问题,而是我使用Firebase向Android后端发帖并运行10次,每秒一次。
Firebase ref = new Firebase(URL);
ref.child("Time").setValue(Currentime());
然而,这是一个异步调用,当我放入while循环时:
while (time_now < time_start + 10 seconds) {
Firebase ref = new Firebase(URL);
ref.child("Time").setValue(Currentime());
}
它似乎首先运行while循环,然后最后运行~10个Firebase调用。有没有办法添加超时,以便在调用下一个异步调用之前强制异步(Firebase)调用运行一秒钟?
答案 0 :(得分:2)
如果查看Java example on the Firebase web site,您会发现它有doTransactions
方法和onComplete
方法:
Firebase countRef = new Firebase(URL);
Transaction.Handler handler = new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData currentData) {
// set the new time
...
}
@Override
public void onComplete(FirebaseError error, boolean committed, DataSnapshot currentData) {
if (error != null) {
...
} else {
if (!committed) {
...
} else {
// transaction committed, do next iteration
...
}
...
}
}
});
countRef.runTransaction(handler);
因此,您需要在doTransaction
方法中设置新时间:
// set the new time
currentData.setValue(time_now);
return Transaction.success(currentData);
然后在onComplete
方法中开始下一次迭代。
// transaction committed, do next iteration
if (time_now < time_start + 10 seconds) {
countRef.runTransaction(handler);
}