2016-12-08 1 views
0

Ich verwende VertX mongoclient mit diesem Code:
eine Abfrage nach Abschluss der mehrere asynchrone Abfragen

mongoClient.getCollections(res -> { 
     if (res.succeeded()) { 
      if (res.result().size() > 0) { 
       for (String collection : res.result()) { 
        mongoClient.dropCollection(collection, resDrop -> { 
         if (resDrop.succeeded()) { 
          LOGGER.warn(collection + "was dropped"); 
         } 
        }); 
       } 
      } else LOGGER.warn("database was dropped"); 
     } else LOGGER.warn("database was dropped"); 
    }); 

Ich möchte einige neue Kollektionen Nachdem alle alten Kollektionen erstellen haben abgeworfen worden
Aber wie wir wissen, Ablegen von Sammlungen, die asynchron ausgeführt werden Wie kann ich herausfinden, wann alle alten Sammlungen gelöscht wurden?

+0

Warum zerstören Sie nicht alle Sammlungen in einem einzigen Befehl? Überprüfen Sie diese http://vertx.io/docs/vertx-mongoclient/java/#_running_other_mongodb_commands –

+0

Dies ist nur für den Test Ich brauche dies für eine Abfrage nach Abschluss der mehrere asynchrone Abfragen ausführen – user298582

+0

Verwenden Sie completablefuture oder rxjava –

Antwort

1
mongoClient.getCollections(res -> { 
     if (res.succeeded()) { 
      if (res.result().size() > 0) { 
       **List<Future> futureList = new ArrayList<>();** 
       for (String collection : res.result()) { 
        mongoClient.dropCollection(collection, resDrop -> { 
         if (resDrop.succeeded()) { 
          **Future future = Future.future(); 
          futureList.add(future); 
          future.complete();** 
          LOGGER.warn(collection + "was dropped"); 
         }else{ 
          future.fail(ar.cause()); 
         } 

        }); 
       } 

       **CompositeFuture.all(futureList).setHandler(ar -> { 
        if (ar.succeeded()) { 
         LOGGER.info("All collections was dropped"); 
        } else { 
         LOGGER.warn("One or all collections was not dropped"); 
        } 
       });** 
      } else LOGGER.warn("database was dropped"); 
     } else LOGGER.warn("database was dropped"); 
    }); 
2

Dies ist eine gemeinsame asynchronous coordination Problem. Sehen Sie sich den Abschnitt Concurrent composition in der Vert.x-Dokumentation an.

+0

Concurrent Zusammensetzung Nur Arbeit für 6 Futures – user298582

+0

[Concurrent Zusammensetzung arbeitet mit einer Liste von Futures] (http://vertx.io/docs/apidocs/io/vertx/core/CompositeFuture.html#all-java.util.List-) – tsegismont

Verwandte Themen