J'ai un CouchDB que je connecte via CouchBaseLite 1.4. J'ai de la difficulté à attendre que tous les documents soient retirés avant de continuer avec l'application.CouchbaseLite attend la fin de la réplication par tirage
Actuellement, j'accomplis cela d'une manière très hacky et je voudrais le réparer pour être mieux en conformité avec les normes de codage appropriées.
actuel:
pull.setContinuous(false);
pull.start();
//Waits for pull replication to start pulling in data
while(!pull.isRunning());
//Waits for pull replication to finish.
while(!pull.getStatus().equals(Replication.ReplicationStatus.REPLICATION_STOPPED));
//Set continuous to true
pull.setContinuous(true);
//Start it again.
pull.start();
La raison pour laquelle je fais ce que j'est d'avoir potentiellement 2 documents dans la base de données que je dois attendre, si elles ne sont pas présents l'application de bureau passe en mode de configuration.
- Est-il possible d'attendre tous les documents à tirage complet sans la double
while
aki? - Mieux encore, supposons que je connais les
_id
des docs. Y a-t-il un moyen d'attendre que les deux soient tirés avant de continuer?
Cela ne résout pas exactement mon problème, car 'changeListener' n'arrêterait pas mon thread principal de s'exécuter. Je suis allé avec votre deuxième suggestion, et utilisé une réplication en un coup pour saisir les deux docs. Il fonctionne maintenant nettement plus vite. Bien que j'aie toujours utilisé le double temps, j'attends seulement deux docs, donc la pause est minimale et acceptable, même si le code est moche. –
Ah, oui, je pense généralement en termes non bloquants. Un couple d'autres pensées: Décrochez l'exécution principale via un appel dans le rappel, ou mettre le fil de dormir et le signaler à partir du rappel? – Hod