Добавление таймаута к асинхронным вызовам в Java
-
21-12-2019 - |
Вопрос
Это не только вопрос 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) выполнялись в течение секунды перед вызовом следующего асинхронного вызова?
Решение
Если вы посмотрите на Пример Java на веб-сайте Firebase, вы увидите, что у него есть 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);
}
Не связан с StackOverflow