动作代码是返回结果还是Promise 返回对象的种类以相同的方式在内部处理。那里 是一种Action,它是异步的,而不是两种 (同步的和异步的)。回归承诺是一个 编写非阻塞代码的技术。
这是否意味着返回Promise<Result>
而不是返回Result
没有区别/优势或劣势?如果玩!框架在public static Result function()
中包含对Promise
的调用,开发人员是否明确返回Promise<Result>
?
答案 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
。