groovy grails异步诺言立即执行

时间:2018-09-28 07:47:59

标签: java grails groovy promise

在下面的代码中,在 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? 但我无法正确理解上述方法

1 个答案:

答案 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