Question

Ce n'est pas uniquement une question Firebase, mais j'utilise Firebase pour publier des publications sur un backend à partir d'Android et l'exécuter 10 fois, une fois par seconde.

Firebase ref = new Firebase(URL);
ref.child("Time").setValue(Currentime());

Cependant, il s'agit d'un appel asynchrone et lorsque je mets une boucle while :

while (time_now < time_start + 10 seconds) {
     Firebase ref = new Firebase(URL);
     ref.child("Time").setValue(Currentime());
}

Il semble exécuter d'abord la boucle while, puis environ 10 appels Firebase à la fin.Existe-t-il un moyen d'ajouter un délai d'attente afin de forcer l'exécution des appels asynchrones (Firebase) pendant une seconde avant d'appeler le prochain appel asynchrone ?

Était-ce utile?

La solution

Si vous regardez le Exemple Java sur le site Web de Firebase, vous verrez qu'il a un doTransactions méthode et un onComplete méthode:

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);

Vous définiriez donc la nouvelle heure dans doTransaction méthode:

// set the new time
currentData.setValue(time_now);
return Transaction.success(currentData);

Et puis démarrez une itération suivante dans le onComplete méthode.

// transaction committed, do next iteration
if (time_now < time_start + 10 seconds) {
    countRef.runTransaction(handler);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top