我用 WSClient
提出休息要求。每个请求返回一些 Future
.
因此,我需要请求1并获取一些数据。然后我需要用请求1的结果中的数据发出请求2。然后我需要用请求2的结果中的数据发出请求3。等等
在我的代码里
def wsChain(data: Data): Future[NewData] = {
getOne(data).flatMap(data2 => {
getTwo(data2).flatMap(data3 => {
getThree(data3).flatMap(data4 => {
getFour(data4).map(result => foo(result))
})
})
})
}
这是一个非常原始的样本,没有任何修改的响应和请求。但我认为即使是它也很难阅读。我现在想 Await
为了 Future
,但这是反模式的
我能做得漂亮点吗?没有n个内部函数。
1条答案
按热度按时间hmae6n7t1#
这正是斯卡拉所面临的情况
for
-理解是为了帮助你。您可以将代码替换为以下内容:…编译器将把它分解成完全相同的东西。你可以阅读更多关于
for
-在这里理解,但简而言之,任何时候你发现自己有一个长长的链条flatMap
打电话(也许还有map
最后),您应该考虑将它们重写为for
-理解,通过折叠深层嵌套使代码更具可读性。