Mau*_*res 12 asynchronous scala future
给出以下示例:
val handler : Connection = new DatabaseConnectionHandler()
val result : Future[Future[Future[Option[ResultSet]]]] = handler.connect
.map( (parameters) => handler )
.map( connection => connection.sendQuery("BEGIN TRANSACTION SERIALIZABLE") )
.map( future => future.map( query => query.rows ) )
.map( future => handler.sendQuery("COMMIT").map( query => future ) )
Run Code Online (Sandbox Code Playgroud)
Future[Option[ResultSet]]
在Scala的未来结构中,是否有可能将其展平以接收最终而不是未来的未来?
我目前正在使用Scala的2.10 Future和Promise,但我无法找到解决方法.我知道我可以使用嵌套回调但我宁愿避免这种情况,因为代码看起来很糟糕.
该Connection
特性被定义在这里.
Deb*_*ski 25
每当你map
使用类型的参数时,A => Future[B]
你应该真正使用它flatMap
.
代码就像这样:
val connection : Connection = new DatabaseConnectionHandler( DefaultConfiguration )
val result: Future[QueryResult] = connection.connect
.flatMap( _ => connection.sendQuery("BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ") )
.flatMap( _ => connection.sendQuery("SELECT 0") )
.flatMap( _ => connection.sendQuery("COMMIT").map( value => query ) )
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用for-understanding.它flatMap
适用于你.
val connection : Connection = new DatabaseConnectionHandler( DefaultConfiguration )
val result: Future[QueryResult] = for {
_ <- connection.connect
_ <- connection.sendQuery("BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ")
_ <- connection.sendQuery("SELECT 0")
queryResult <- connection.sendQuery("COMMIT").map( value => query )
} yield { queryResult }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12566 次 |
最近记录: |