这是在学习的代码中遇到的一个问题
这里的Success 是在路由中对 Future 用了onComplete
源码如下:
这是Akka HTTP里的一个directive,用来处理Future的
这里的Success 是对 Try[T]的一种情况def onComplete[T](future: ⇒ Future[T]): Directive1[Try[T]] =
Directive { inner ⇒ ctx ⇒
import ctx.executionContext
future.fast.transformWith(t ⇒ inner(Tuple1(t))(ctx))
}
def staticRoute: Route = |
问题来了
我之前在这个路由前面import StatusCodes._
因为其他路由会用到NotFound这个种status code,我就全引入了,但是我没有注意到这里也有一个Success 的status code
所以compile的时候就报错说混淆了,但我找了半天都没找到哪里引入了另外的Success
直到我注释了import scala.util.{Failure, Success}
才看到明确的错误提示,指向了StatusCodes里面
同样的问题很多
和这个问题一样,另一个东西这里面我也被混淆了
onComplete
这个名字一看就是处理Future的
但是如果是
这个就是上面那个AKKA HTTP里的directive 只能在路由里用的 HTTP层的玩意onComplete(future:Future[T]){
case Success(value)=>xxx
case Falure(e)=>xxx
}
而我们平时用的处理普通Future的要这么写
val future :Future[T] |
写法不同哦,要不类型会无法匹配的,很容易就混淆了