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?这是好方法吗?在这种情况下,最佳做法是什么?
你必须自己解决承诺。请记住,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 对象的方法。
| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |