来自下面的声明是什么意思!文档?

时间:2015-04-15 09:13:38

标签: java playframework promise

来自play documentation

  

动作代码是返回结果还是Promise   返回对象的种类以相同的方式在内部处理。那里   是一种Action,它是异步的,而不是两种   (同步的和异步的)。回归承诺是一个   编写非阻塞代码的技术。

这是否意味着返回Promise<Result>而不是返回Result没有区别/优势或劣势?如果玩!框架在public static Result function()中包含对Promise的调用,开发人员是否明确返回Promise<Result>

1 个答案:

答案 0 :(得分:2)

不,明确返回Promise<Result>是没有意义的,如果您的代码所做的是同步,则只返回Result

但是,有时您的代码会调用返回Promise的其他代码,因为它执行非阻塞异步操作。在这种情况下,您应该转换承诺,从中提取所需的信息,然后将其返回。通过保持Promise而不是展开它 - 您不会强制线程阻塞并节省上下文切换的开销,这可能很重要。

例如,假设您要查询Web服务:

WSRequestHolder holder = WS.url("someUrl");
Promise<JsonNode> json = holder.get();

现在,您可以执行以下操作:

JsonNode jsonResult = json.get(); // force the program to wait
return jsonResult; // return it

但这会强制线程在阻塞io操作中进行上下文切换。相反,您可以直接返回承诺:

return json; // return the promise

并且节省了上下文切换的开销,如果您需要先操作它,也可以使用.map