Граалей асинхронного создания обещания
Я нахожусь в 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 ответ:
В конце концов я позвонил .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)