groov / grails中的for-comprehension或flatMap

时间:2016-10-18 00:30:59

标签: scala grails groovy grails-controller

自grails 2.3以来,有task之类的异步/承诺能力,如waitAll。但是,一旦我有一些promise s,如何将它们组合起来?

例如,在控制器中

def nameT = task { database1.getNameById(345L) }
def balanceT = task { database2.getBalanceById(456L) }
render nameBalanceView([name: nameT.get(), balance: balanceT.get()])

但现在我们需要阻止等待get。 是否可以使用

形式的最后render
task { render nameBalanceView([name: name, balance: balance]) }

为了比较,Scala可以这样做:

Action.async {
   val nameF = Future { database1.getNameById(345L) }
   val balanceF = Future { database2.getNameById(456L) }
   val nameAndBalanceF = nameF flatMap { n => balanceF map { b => (n, b) } }
   nameAndBalance map { nb => nameBalanceView(nb) }
}

0 个答案:

没有答案