Grails承诺没有调用回调

时间:2015-01-31 11:32:39

标签: multithreading grails asynchronous promise

我无法获得一个应该使用Promise onComplete()调用的回调。

// some service
def initiateDbLoad() {
    def p1 = task { dbLoad() }
    p1.onComplete { result ->           
        dbLoadCallback()
    }
}

def dbLoad() {
    // some long-running process here
}

def dbLoadCallback() {
    // I am never called
}

用例是我想在一个单独的线程中启动一个长时间运行的进程。调用线程应该返回,而不是等待线程完成。当长时间运行的进程完成时,我希望它执行回调。这可能吗?或者它应该看起来像下面的代码?

def initiateDbLoad() {
    def p1 = task {
        dbLoad()
        dbLoadCallback()
    }
}

1 个答案:

答案 0 :(得分:2)

onComplete仅在成功时被召唤。您还必须添加onError才能获得实际错误。