好的,所以我对返回Akka Futures的函数进行了一系列调用,并且我通过使用flatMap和map来链接它们:
doAsyncCall(..).flatMap { res1 =>
doAsyncCall2(..).flatMap { res2 =>
doAsyncCall3(..).map { res3 =>
res
}
}
}
可以分散在不同的函数调用中。现在每个doAsyncCallX调用返回一个Future [Result],我希望能够组合这些结果,将它们传递到链上,直到最后我可以返回链中所有结果的组合结果。
为此,我想让每个doAsyncCallX接收前一个结果的隐式参数,并将获得的结果与前一个结果相结合。问题是,我没有看到这样做的方法,而不会乱丢我的库的使用与这样的隐式val:
doAsyncCall(..).flatMap { res1 =>
implicit val implicitRes1 = res1
doAsyncCall2(..).flatMap { res2 =>
implicit val implicitRes2 = res2
doAsyncCall3(..).map { res3 =>
res
}
}
}
我想要做的是能够拦截flatMap的应用程序,以确保先前的响应作为下一个doAsyncCallX调用的隐式参数正确传递。关于如何做到这一点的任何想法?
答案 0 :(得分:2)
也许我错过了一些东西,但根本没有理由使用含义吗?
for(res1 <- doAsyncCall1(..);
res2 <- doAsyncCall2(res1);
res3 <- doAsyncCall3(res2)) yield(res3)
如果您需要返回组成多个中间结果的结果,请更改yield以产生不同的结果,可能是一个元组,如yield((res1,res2,res3))
。其结果类似于Future[(Result1,Result2,Result3)]