如何在Play Framework 2.x操作中使用MongoDB异步Java驱动程序?

Sae*_*fam 5 asynchronous callback nonblocking mongodb playframework

我想在Play Framework 2项目中使用MongoDB Async Java Driver,MongoDB Async Java Driver返回SingleResponseCallback.我不知道如何在Play控制器中处理这种结果.

例如,如何从Play控制器中的以下代码返回计数:

collection.count(
 new SingleResultCallback<Long>() {
  @Override
  public void onResult(final Long count, final Throwable t) {
      System.out.println(count);
  }
});
Run Code Online (Sandbox Code Playgroud)

我怎样才能从SingleResultCallback获得结果然后将其转换为Promise?这是好方法吗?在这种情况下,最佳做法是什么?

cae*_*eus 2

你必须自己解决承诺。请记住,Play 承诺是 scala future 的包装器,解决 future 的唯一方法是使用 scala 承诺(与 play 承诺不同)(我知道,这有点令人困惑)。你必须做这样的事情:

Promise<Long> promise = Promise$.MODULE$.apply();
collection.count(
 new SingleResultCallback<Long>() {
   @Override
   public void onResult(final Long count, final Throwable t) {
     promise.success(count);
  }
});
return F.Promise.wrap(promise.future());
Run Code Online (Sandbox Code Playgroud)

Promise$.MODULE$.apply()就是从 java 访问 scala 对象的方法。