我有一些像这些功能(我不知道arity,我只知道返回的类型为Future[T]
):
def a(a: Int): Future[String] = { Future("a") }
def b(b: Long): Future[Double] = { Future(1.0) }
我想写一个可以像这样使用的泛型函数WithLoading
:
def a(a: Int): Future[String] = WithLoading { Future("a") }
def b(b: Long, c: Int): Future[Double] = WithLoading { Future(1.0) }
并将执行与以下相同的结果:
def a(a: Int): Future[String] = { var loading = true; Future("a").map (_ => loading = false) }
def b(b: Long): Future[Double] = { var loading = true; Future(1.0).map (_ => loading = false) }
有可能这样做吗?如果答案是肯定的,你能给我一些建议吗?
答案 0 :(得分:1)
似乎WithLoading
根本不需要了解arity。
def withLoading[T](action: => Future[T]): Future[T] = {
doSmthWithLoading
val triggeredAction = action
val result = triggeredAction.onComplete(r => {
cleanupSmth
})
result
}