Groovy Grails Асинхронное обещание выполнить немедленно - PullRequest
0 голосов
/ 28 сентября 2018

В приведенном ниже коде, внутри 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).Странно? , но я не могу правильно понять описанный выше подход

1 Ответ

0 голосов
/ 28 сентября 2018

Если вы создаете список PromisList с заданием здесь:

def promiseList = callApisInParallel()

, тогда почему вы не используете его здесь?

p.onComplete { result ->
println "Promise returned $result"

//manipulate the data and then return the result

//resolve()
}

Измените p.onComplete на promiseList.onComplete

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...