1

我想编写一个异步函数,它接受像 HTTPBuilder.request 这样的处理程序的闭包。函数是怎么写的?

当我调用该函数时,它将如下所示:

// calling my function now - we'll process the results when status is available...
myFunction(arg1, arg2) {
  status.success = { result ->
    println 'cool'
  }
  status.failure = { result ->
    println 'not cool'
  }
}
4

1 回答 1

1

的“body”myFunction实际上是 type 的第三个参数Closure。当您声明它时,它实际上将具有三个参数:arg1arg2和另外一个包含主体的参数。

myFunction使用委托调用主体闭包时。委托持有status.successstatus.failure事件处理程序闭包。然后进行异步操作并捕获结果。最后,调用适当的结果处理程序闭包。像这样的函数的骨架看起来像这样:

def myFunction(arg1, arg2, Closure body) {
    def delegateMap = [status:[:]]
    body.delegate = delegateMap
    body.call()

    // start async process
    Thread.start {
         def result = doAsyncStuff()
         if (isSuccess(result) && delegateMap.status.success) {
             delegateMap.status.success.call(result)
         }
         else if (isFailure(result) && delegateMap.status.failure) {
             delegateMap.status.failure.call(result)
         }
    }
}
于 2012-10-19T16:19:32.843 回答