期货的工作原理与JavaScript承诺完全相同。创建一个返回Future<T>
的方法,在这个方法中进行异步调用。当你异步完成后,只需拨打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适用于流。因此,在RX上面的代码将变为:
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);
}
随着我已经使用mongoClient
RX的API
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"));
});
,但你可以做sqlClient
相同。
我不清楚你的意思是_resolve callback_。 – tsegismont
@tsegismont扁方法调用 – twogoods