我有一些代码像
//all data have different types
val data1Future = loadData1(params)
val data2Future = loadData2(params)
val data3Future = loadData3(params)
def saveResult(rez): Future[_] = ???
data1Future.flatMap { data1 =>
data2Future.flatMap { data2 =>
data3Future.flatMap { data3 =>
//do some computation
//several rows and several vals
val rez = ???
saveResult(rez)
}
}
}
但它有点难看:)不幸的是,我不能用于理解,因为我需要像“平坦产量”这样的东西
for {
data1 <- data1Future
data1 <- data1Future
data1 <- data1Future
} flatYield {
//do some computation
//several rows and several vals
val rez = data1 + data2 + data3
saveResult(rez)
}
您是否知道像“用于理解”这样优雅的模式,但在链的末尾使用 flatMap 而不是 map ?
你可以这样做:
for {
data1 <- data1Future
data2 <- data2Future
data3 <- data3Future
rez = {
//do some computation
//several rows and several vals
data1 + data2 + data3
}
r <- saveResult(rez)
} yield r
这翻译成
data1Future.flatMap { data1 =>
data2Future.flatMap { data2 =>
data3Future.flatMap { data3 =>
val rez = {
//do some computation
//several rows and several vals
data1 + data2 + data3
}
saveResult(rez).map(r => r)
}
}
}
这与您的代码同构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)