在下面的代码中,在 controllerMethod 内部,onComplete事件立即执行,而无需等待groovy / grails中的callApisInParallel方法中的 promiseList 完成
import grails.async.Promise
import grails.async.PromiseList
class asyncProgram {
def getReportTask() {
return task {
def res = reportService.fetchReport()
// api request
res
}
}
private def callApisInParallel() {
def promiseList = new PromiseList()
def reportTask = getReportTask()
promiseList << reportTask
//def apiResults = waitAll(promiseList)
//def results = apiResults[0]
// def res = results[0]
promiseList
}
def execute() {
Promise p = task {
def promiseList = callApisInParallel()
promiseList.onComplete { result ->
println "Promise returned $result"
//manipulate the data and then return the result
//resolve()
}
}
return p
}
def controllerMethod() {
Promise p = execute()
p.onComplete { result ->
}
}
}
我需要类似javascript中的“ resolve”方法,该方法可以告知 execute 方法的onComplete事件onComplete已完成并标记当前的诺言已完成
我找到了一个链接 Groovy/Grails promises/futures. There is no .resolve(1,2,3) method. Strange? 但我无法正确理解上述方法
答案 0 :(得分:0)
如果您要在此处创建带有任务的promiseList:
def promiseList = callApisInParallel()
那你为什么不在这里使用它?
p.onComplete { result ->
println "Promise returned $result"
//manipulate the data and then return the result
//resolve()
}
将p.onComplete
更改为promiseList.onComplete