修改通过以接受返回Future的方法

时间:2018-12-16 06:05:03

标签: scala akka akka-stream

我正在使用via调用方法,如下所示:

myRawStr(id)
.take(1)
.via(myMethod("someString", someSource)
.zip(Source.fromIterator(() => Iterator.from(1)))
.collect {
...
}

myMethod返回类型Flow[ByteString, MyValidated[MyClass], NotUsed],但现在它将返回Future[Flow[ByteString, MyValidated[MyClass], NotUsed]]注意:将来)

但是这样做会使我在via上出现编译错误。错误状态:

[error]  found   : [as, mat, ec]scala.concurrent.Future[akka.stream.scaladsl.Flow[akka.util.ByteString,MyValidated[MyClass],akka.NotUsed]]
[error]     (which expands to)  [as, mat, ec]scala.concurrent.Future[akka.stream.scaladsl.Flow[akka.util.ByteString,scala.util.Either[List[ValidationError],MyClass],akka.NotUsed]]
[error]  required: akka.stream.Graph[akka.stream.FlowShape[akka.util.ByteString,?],?]
[error]       .via(myMethod("someString", someSource))
[error]

如何通过在流程中添加另一个步骤来修改此规则以接受Futurebased on this question返回非将来?

1 个答案:

答案 0 :(得分:1)

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.0.0/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.0.0/umd/react-dom.production.min.js"></script> <div id="react"></div>接受via作为参数。您要么必须更改Flow才能返回MyMethod而不是Flow。或者,也可以使用Future来代替via,它使用返回mapAsyc(MyMethod)的方法来映射您的流:

https://doc.akka.io/docs/akka/2.5/stream/operators/Source-or-Flow/mapAsync.html