grails - Grails异步响应呈现如何工作?

标签 grails asynchronous promise

我在grails Controller 中有一个代码段,如下所示:

Future<Map<String,Object>> future1 = service.getMetrics(args1)
Future<Map<String,Object>> future2 = service.getMetrics(args2)

Map<String,Object> result1 = future1.get(10, TimeUnit.DAYS.MINUTES)
Map<String,Object> result2 = future2.get(10, TimeUnit.DAYS.MINUTES)

render([
    data1: result1,
    data2: result2
] as JSON)

我意识到future1.getfuture2.get阻止了调用,当我遇到Grails Async Response Rendering时想使它们异步

我现在正在考虑将我的代码重构为
task {
    Future<Map<String,Object>> future1 = service.getMetrics(args1)
    Future<Map<String,Object>> future2 = service.getMetrics(args2)

    Map<String,Object> result1 = future1.get(10, TimeUnit.DAYS.MINUTES)
    Map<String,Object> result2 = future2.get(10, TimeUnit.DAYS.MINUTES)

    render([
     data1: result1,
     data2: result2
    ] as JSON)    
}

这可行,但我想了解任务的工作原理以及如何确保当前线程在future.get上不会被阻塞,以及它如何呈现正确 session 的响应

最佳答案

我相信Graeme在回答question时比当前文档更进一步阐明了这一点。 Graeme链接到该类,该类确切显示了返回Promise或PromiseMap时结果转换器如何检测和处理响应。

关于grails - Grails异步响应呈现如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34684038/

相关文章:

silverlight - 以串行方式在 Silverlight 中运行异步操作

javascript - 在 JavaScript 中抽象掉异步/ promise ?

javascript - 为什么 Promise-Limit 在 Nodejs 中不起作用?

regex - Grails-从外部属性文件中读取正则表达式

grails - Cereal 以一对多关系排序

java - 如何在 grails/java 中将 PNG 转换为 jpeg

ios - 在 iOS 中管理对 Web API 的异步调用

mysql - Grails 数据库迁移 : Convert xml/groovy diff into sql script file

java - 使用用户定义的 Spring @Components 进行异步处理

javascript - jQuery.when() 和 ES6 的 Promise.all() 有什么区别?