繁体   English   中英

Scala:拦截函数,用于为Akka Futures提供隐式参数

[英]Scala: Intercept functions to provide implicit parameters with Akka Futures

好的,所以我有一系列调用返回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调用的隐式参数正确传递。 有关如何实现这一点的任何想法?

也许我错过了一些东西,但有没有理由使用隐含的东西?

for(res1 <- doAsyncCall1(..);
    res2 <- doAsyncCall2(res1);
    res3 <- doAsyncCall3(res2)) yield(res3)

如果需要返回组成多个中间结果的结果,请更改yield以产生不同的结果,可能是一个元组,如yield((res1,res2,res3)) 其结果将类似于Future[(Result1,Result2,Result3)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM