在My Grails服务中,我希望在承诺或某些方法异步运行时呈现页面。我从文档中尝试了不同的东西 https://docs.grails.org/3.1.10/guide/async.html。 在调试时我看到返回渲染在promise之前运行,但是在前端仍然没有渲染任何东西,直到promise完成运行。 我试图使用promise和thread。我列出的所有东西都不是我想要的。 我甚至将saveOrder复制到copyOrder,想到也许promise会停止渲染的结果。仍然没有工作。
def save(Order order) {
def saveorder = orderService.saveOrder(order, user.id)
def copyOrder=new AppreciationOrder();
InvokerHelper.setProperties(copyOrder, saveorder.properties)
response.status = 201
Promise p = task {
checkService.checkForDuplicate(saveorder)
notificationService.newOrder(saveorder)
}
p.onComplete { result ->
println "Promise returned $result"
}
return render(view: "/controllers/order/order/_show", model: [order: copyOrder])
}
答案 0 :(得分:0)
尝试重定向而不是渲染,例如以下假设您的保存操作来自订单域:
redirect( action: 'show', params: [order: copyOrder] )
你可能必须玩上面的参数,例如:如果你的节目动作需要你可以做的ID:
redirect( action: 'show', id: copyOrder.id )
我认为您的异步代码最好放在服务中,您也可以添加一个onError子句,例如
p.onError { Exception err ->
println "Error - $err"
}