Вопрос

Это не только вопрос 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top