玩!框架异步调用修改数据库的相同对象

朱利安德

我对此代码有几个疑问:

public static Result submit() {

        final Object object = filledForm.get();

        Akka.future(new Callable<Void>() {
            public Void call() throws Exception {
                 WS1...
                 object.save();
            });

        Akka.future(new Callable<Void>() {
            public Void call() throws Exception {
                 WS2...
                 object.save();
            });

        return ok(....);
}
  1. Akka.future已过时,我应该按照此处说明使用Promise 。它比较冗长。你好吗 ?

  2. 由于数据库中的并行写入,这将导致乐观锁异常。我应该将呼叫相互封装吗?

谢谢

离子Cojocaru

如果在两次调用完成后保存对象更新,则完全避免了锁定问题。因此,您可以使用Promise将呼叫分组在一起,如下所示:

public static Promise<Result> submit() {
final Object object = filledForm.get();
Promise<JsonNode> jsonPromise1 = ws.url("url1").get().map(
    new Function<WSResponse, JsonNode>() {
        public JsonNode apply(WSResponse response) {
            JsonNode json = response.asJson();
            return json;
        }
    }
);
Promise<JsonNode> jsonPromise2 = ws.url("url2").get().map(
    new Function<WSResponse, JsonNode>() {
        public JsonNode apply(WSResponse response) {
            JsonNode json = response.asJson();
            return json;
        }
    }
);
 return Promise.sequence(jsonPromise1,jsonPromise2).map(
 new Function<WSResponse, Result>() {
        public JsonNode apply(List<JsonNode> results) {
            //populate object
           object.save();
            return ok(...);
        }
    });
}

如果您需要依靠第一个电话的信息来进行第二个电话,可以将诺言链接在一起,例如 return promise1.flatMap(){ return promise2.map { object.save()}}

如果您的通话可能失败,请不要忘记添加恢复功能。

有关完整示例,请访问https://www.playframework.com/documentation/2.4.x/JavaWS,如果您使用的是Play的旧版本,只需将2.4.x替换为版本前缀即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

django 修改数据库对象

来自分类Dev

为什么需要异步调用数据库?

来自分类Dev

如何处理对MySQL数据库的异步调用

来自分类Dev

等待GWT异步调用中的数据库结果

来自分类Dev

通过索引修改数组内的相同对象

来自分类Dev

从异步调用修改数组而不是修改数组 swift

来自分类Dev

未更改数据库对象时调用SaveChanges

来自分类Dev

修改数据库的元数据

来自分类Dev

如何使用LINQ异步调用带有子记录的数据库?

来自分类Dev

如何使用LINQ异步调用带有子记录的数据库?

来自分类Dev

使用Ajax对数据库进行异步调用时,ERR_CONNECTION_RESET *仅*-CakePHP

来自分类Dev

使用Ajax对数据库进行异步调用时,ERR_CONNECTION_RESET *仅*-CakePHP

来自分类Dev

修改数据库中主键的身份规范

来自分类Dev

codeigniter-无法删除或修改数据库

来自分类Dev

ddev:如何修改数据库凭据

来自分类Dev

Java在运行jar时修改数据库

来自分类Dev

使用MySQL Workbench修改数据库架构

来自分类Dev

在Entity Framework查询期间修改数据库表

来自分类Dev

通过AJAX修改数据库值

来自分类Dev

Android:修改数据库后无法更新UI

来自分类Dev

RecyclerView 修改数据库行后不刷新

来自分类Dev

修改数据库表中的项目

来自分类Dev

Inno setup - 允许修改数据库

来自分类Dev

MySQL临时修改数据库用于开发

来自分类Dev

Scala异步数据库调用

来自分类Dev

节点JS异步数据库调用

来自分类Dev

使用递归的异步数据库调用

来自分类Dev

玩!框架/规范:将数据转换为JSON并存储到数据库中

来自分类Dev

无法通过循环内的异步调用修改表视图数据源