Env: Akka 2.1, scala versión 2.10.M6, JDK 1.7,u5

Ahora es mi problema:
Tengo:

future1 = Futures.future(new Callable<Future<object>>(){...});
future2 = ? extends Object;
Future.sequence(future1, future2).onComplete(...)

ahora en primera línea, tengo un futuro de Futuro de objeto, hay alguna manera de convertirlo en un Futuro aunque no el bloqueo de mi subproceso actual?

¿Hay algún método en akka? Tan lejos como he comprobado, yo aun no se encontró ninguna aún…
Primer tiempo para tener un puesto de….Sry por el mal formato y organizar… :~P

Esto no se parece a Scala. Hay una razón por la Scala de etiqueta?
En realidad estoy usando akka 2.1 con scala lib para 2.10… sry por la confusión…

OriginalEl autor Vincent Zou | 2012-08-08

3 Comentarios

  1. 40

    Respuesta corta (inglés): flatMap dat sh!t

    Respuesta más breve (Scala):

    flatMap(identity)

    Respuesta más corta: (Scala 2.12):

    flatten

    Respuesta larga (Java):

    flatMap(new Mapper<Future<X>>,Future<X>>() {
      @Override public Future<X> apply(final Future<X> f) { return f; }
    })
    Viktor~~~Grandes fans~~~ y gracias por la solución….flatMap es genial~
    Feliz hAkking! 🙂
    : (…para flatMap, lo que si puedo hacer que el interior de Futuro (future1 la función se puede llamar) que no se pudo utilizar en el futuro.fracasado (a)? el flatMap podría todavía ser llamado? también, no quiero recuperarlo como, más adelante me gustaría hacer en el futuro de la secuencia de error also….By el camino, estoy usando java, divertido para tu inglés, la respuesta…: )
    Yo no entiendo lo que quieres decir, más fácil es, probablemente, sólo para probarlo?

    OriginalEl autor Viktor Klang

  2. 10

    Nota: Desde Viktor Klang‘s 2012 respuesta, recientemente (Marzo de 2016) se añadió en su blog para scala 2.12:

    Falta canónica de combinadores: acoplar

    Eres uno de nosotros Futurolos usuarios que están cansados de la vieja flatMap(identity) repetitivo de las naciones unidas de anidación de Futuros como en:

    val future: Future[Future[X]] = ???
    val flattenedFuture /*: Future[X] */ = future.flatMap(identity)

    Entonces tengo algunas buenas noticias para usted! Comenzando con Scala 2.12

    scala.concurrente.Futuro tendrá un aplanar el método con la siguiente firma:

    def flatten[S](implicit ev: T <:< Future[S]): Future[S]

    Permitiendo a escribir:

    val future: Future[Future[X]] = ???
    val flattenedFuture /*: Future[X] */ = future.flatten

    OriginalEl autor VonC

  3. -1

    Puede crear otra tarea

    Futures.future(new Runnable(){
         //wait for future1
         //wait for future2
         //do something with the results.
    });

    o combinar las tareas

    Futures.future(new Runnable(){
         //do the work future2 would have done.
         //wait for future1
         //do something with the results.
    });
    Gracias por la respuesta….pero, ¿por qué nos tomamos la molestia de utilizar en el futuro cuando trató de hacer todas las cosas async y decir, vamos a em se ejecuta en un hilo??
    Aún puede ser ejecutado en múltiples hilos (asumiendo que usted tiene una piscina de más de un hilo) tal como lo hace ahora. Esto no va a cambiar el nivel de concurrencia. Si usted tiene una piscina de uno, sólo podría utilizar una tarea para todo y podría ser mucho más simple.
    si, funciona bien, pero si future1 es algo ,digamos, como es el problema en la pregunta del post, como Futuro<Futuro<…>>, y este hilo principal sería el bloqueo de un tiempo tan largo, que iba a ser un desperdicio…y flatMap haría un nuevo Futuro para el Futuro<Futuro<…>> y dar a la llamada de vuelta al hilo original que podría ahorrar más recursos…Pero gracias por tu sugerencia alguna manera. : )
    Los residuos es relativamente trivial y utilizando otro enfoque que podría perder mucho más en mi humilde opinión. También usted no necesita para mantener envolver el Futuro de los objetos. No hay ninguna razón por la que no sería un simple futuro. De hecho, se podría agregar lo que se hace en esa tarea, de modo que no hay necesidad de devolver nada en absoluto.

    OriginalEl autor Peter Lawrey

Dejar respuesta

Please enter your comment!
Please enter your name here