渲染页面grails 3.1后运行方法异步

时间:2017-05-16 11:04:17

标签: grails asynchronous groovy promise

在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])

}

1 个答案:

答案 0 :(得分:0)

尝试重定向而不是渲染,例如以下假设您的保存操作来自订单域:

redirect( action: 'show', params: [order: copyOrder] )

你可能必须玩上面的参数,例如:如果你的节目动作需要你可以做的ID:

redirect( action: 'show', id: copyOrder.id )

我认为您的异步代码最好放在服务中,您也可以添加一个onError子句,例如

p.onError { Exception err ->
    println "Error - $err"
}