我有一个返回值为Future [Int]的函数
def func: Future[Int] = {...}
Run Code Online (Sandbox Code Playgroud)
我将定期检查func的返回值,直到它满足某些条件(例如返回值大于10),然后我将使用此返回值来创建map/flatmap的其他未来值.
如何在没有任何同步代码的情况下完成这项工作?如下所列:
def check: Future[Int] = {
var ret: Int = Await.result(func, Duration.Inf)
while (ret <= 10) {
ret = Await.result(func, Duration.Inf)
}
Future(ret + 100)
}
Run Code Online (Sandbox Code Playgroud)
rog*_*one 11
实现此目的的一种方法是使用递归,如下所示.
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
def check(func: () => Future[Int]): Future[Int] = {
Future.unit.flatMap(_ => func()) flatMap {
case x if x <= 10 => check(func)
case x => Future.successful(x + 100)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1011 次 |
| 最近记录: |