scala - How can I flatten this Future[T] structure? -
given following example:
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 ) ) is possible flatten receive future[option[resultset]] @ end instead of future inside future inside future structure in scala?
i using scala's 2.10 future's , promise's, can't find way to this. know can use nested callbacks rather avoid since code going horrible.
the connection trait defined here.
whenever map argument of type a => future[b] should using flatmap.
the code this:
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 ) ) alternatively, use for-comprehension. it uses flatmap you.
val connection : connection = new databaseconnectionhandler( defaultconfiguration ) val result: future[queryresult] = { _ <- connection.connect _ <- connection.sendquery("begin transaction isolation level repeatable read") _ <- connection.sendquery("select 0") queryresult <- connection.sendquery("commit").map( value => query ) } yield { queryresult }
Comments
Post a Comment