Граалей асинхронного создания обещания


Я нахожусь в grails 2.3.1-пытаюсь использовать асинхронные функции .

Это массовая обработка данных. Я пытаюсь синхронизировать 2 базы данных, что включает в себя сравнение обеих и возврат списка "дельт". Я пытаюсь ускорить этот процесс

В документации говорится, что я могу просто добавить набор замыканий в PromiseList, а затем вызвать onComplete (), чтобы проверить, что все замыкания завершены. Это мои попытки-непосредственно опираясь на "Вы также можете построить PromiseList вручную " в документации:
    def tasksMemberDeltas = new PromiseList()
    pages.each {Integer page ->
        tasksMemberDeltas << {findCreateMemberDeltas(page, (page + pageSize) - 1)}
        if (page % 30 == 0) {
            tasksMemberDeltas.onComplete {
                tasksMemberDeltas = new PromiseList()
            }
        }

Возвращает:

Error groovy.lang.MissingMethodException: 
 No signature of method: java.util.ArrayList.onComplete()
1 2

1 ответ:

В конце концов я позвонил .get (), который вызывает waitAll. Вхожу внутрь .get () и обнаружив, что это действительно waitAll было моим откровением.

Поэтому, если у меня есть одна задача, я называю:

waitAll finalDeltas

Если у меня есть список, я называю:

taskFinalDeltas.get()

OnComplete () логически относится к одной дельте. Только не список. Так что это работает нормально:

Promise memberDeleteDeltas = task {
        findDeleteAndTagDeltas()
    }
    memberDeleteDeltas.onError { Throwable err ->
        println "An error occured ${err.message}"
    }
    memberDeleteDeltas.onComplete { result ->
        println "Completed create deltas"
    }
    waitAll(memberDeleteDeltas)