2013-10-22 93 views
2

我在grails 2.3.1 - 尝试使用async featuresGrails异步 - 创建承诺

这是批量数据处理。我正在尝试同步2个数据库,其中涉及比较两个数据库并返回'deltas'列表。我试图加快这个过程

该文件说,我可以只是添加一组关闭到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

在我打电话。获得()的结尾它调用了WaitAll。进入.get()并发现它确实等待所有是我的启示。

所以,如果我有一个任务,我称之为:

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)