Hi Richard, Your foreach will run through the list of Future[String] and on every single Future it will attach an onComplete block (this is what pipeTo does). The reason that this is ok is that you read the value of sender when you call the method pipeTo. If you on the other hand had written the onComplete code block yourself inside the foreach, the code would have been broken. That was the not so obvious thing I was referring to.
B/ On 22 September 2014 at 19:07:51, Richard Rodseth ([email protected]) wrote: I'm aware of the caveats about sender and closing over mutable state, but in this case the list was a plain list, not a Future. But thanks for showing an alternative. On Mon, Sep 22, 2014 at 7:30 AM, Björn Antonsson <[email protected]> wrote: Hi Richard, When dealing with futures, inside actors you should generally be careful with using sender, since the code that is executed when the future is completed isn't run inside the actor and the meaning of sender might have changed. In this case, the pipeTo pattern will keep you safe, but it's easy to mess up. If you don't plan to use the intermediate I would collapse the map and foreach into a single foreach. val recipient = sender requests.foreach { responseFuture => { responseFuture.map(response => s"success $response").recover({ case _ => "failed"}) pipeTo recipient }} B/ On 19 September 2014 at 20:46:50, Richard Rodseth ([email protected]) wrote: I'm still getting used to all the flavours of future composition. Fun stuff. Is there a better way than the following to pipe a list of futures to the sender (one message per future) ? val requests:List[Future[SomeResponse]] = ... val messages:List[Future[String]] = requests.map { responseFuture => { val msgFuture:Future[String] = responseFuture.map(response => s"success $response").recover { case _ => "failed"} msgFuture }} messages.foreach { msg => msg pipeTo sender } -- >>>>>>>>>> Read the docs: http://akka.io/docs/ >>>>>>>>>> Check the FAQ: >>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user --- You received this message because you are subscribed to the Google Groups "Akka User List" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/akka-user. For more options, visit https://groups.google.com/d/optout. -- Björn Antonsson Typesafe – Reactive Apps on the JVM twitter: @bantonsson -- >>>>>>>>>> Read the docs: http://akka.io/docs/ >>>>>>>>>> Check the FAQ: >>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user --- You received this message because you are subscribed to the Google Groups "Akka User List" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/akka-user. For more options, visit https://groups.google.com/d/optout. -- >>>>>>>>>> Read the docs: http://akka.io/docs/ >>>>>>>>>> Check the FAQ: >>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user --- You received this message because you are subscribed to the Google Groups "Akka User List" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/akka-user. For more options, visit https://groups.google.com/d/optout. -- Björn Antonsson Typesafe – Reactive Apps on the JVM twitter: @bantonsson -- >>>>>>>>>> Read the docs: http://akka.io/docs/ >>>>>>>>>> Check the FAQ: >>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user --- You received this message because you are subscribed to the Google Groups "Akka User List" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/akka-user. For more options, visit https://groups.google.com/d/optout.
