В приведенном ниже коде, внутри controllerMethod , событие onComplete выполняется немедленно, не дожидаясь завершения promoList в методе callApisInParallel в groovy / grails
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, который может сообщать событию onComplete execute , что метод onComplete выполнен, и пометить текущее обещание как выполненное
Я нашел одну ссылку Groovy / Grails обещания / фьючерсы.Не существует метода .resolve (1,2,3).Странно? , но я не могу правильно понять описанный выше подход