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.

Reply via email to