Futures funktioniert genau das gleiche wie JavaScript verspricht. Erstellen Sie eine Methode, die Future<T>
zurückgibt, führen Sie Ihren Async-Aufruf in dieser Methode aus. Wenn Ihr async getan wird, rufen Sie einfach future.complete(<T>)
Future<JsonObject> getUsers(){
Future<JsonObject> future = Future.future();
client.getConnection(res -> {
SQLConnection connection = res.result();
connection.query("SELECT count(1) FROM T_User", res2 -> {
connection.query("SELECT count(1) FROM T_Book", res3 -> {
JsonObject rows = new JsonObject().put("res2",res2.result().getRows()).put("res2",res3.result().getRows());
future.complete(rows);
// In exception block, you can add
// future.fail(Throwable);
});
});
});
return future;
}
RX auf Strom funktioniert. So ist der obige Code in RX wird geworden:
Observable<JsonObject> getUsers(){
return Observable.create(subscriber -> {
client.getConnection(res -> {
SQLConnection connection = res.result();
connection.query("SELECT count(1) FROM T_User", res2 -> {
connection.query("SELECT count(1) FROM T_Book", res3 -> {
JsonObject rows = new JsonObject().put("res2",res2.result().getRows()).put("res2",res3.result().getRows());
subscriber.onNext(rows);
subscriber.onCompleted();
});
});
});
}, Emitter.BackpressureMode.NONE);
}
Mit RX APIs
Observable<Long> userCount = mongoClient.rxCount("users", query).toObservable();
Observable<Long> booksCount = mongoClient.rxCount("books", query).toObservable();
Observable
.zip(userCount, booksCount, (userRes, booksRes) ->
new JsonObject().put("user",userRes).put("books",booksRes)
)
.subscribe(objects -> {
System.out.println(objects.getString("user"));
System.out.println(objects.getString("books"));
});
I mongoClient
verwendet haben, aber Sie können mit sqlClient
gleiche tun.
Es ist mir nicht klar, was Sie mit _resolve Callback_ meinen. – tsegismont
@tsegismont flach der Methodenaufruf – twogoods