Got it. Thanks!

On Mon, Sep 22, 2014 at 11:32 PM, Björn Antonsson <
bjorn.antons...@typesafe.com> wrote:

> 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 (rrods...@gmail.com)
> 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 <
> bjorn.antons...@typesafe.com> 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 (rrods...@gmail.com)
>> 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 akka-user+unsubscr...@googlegroups.com.
>> To post to this group, send email to akka-user@googlegroups.com.
>> 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 <http://typesafe.com/> – Reactive Apps on the JVM
>>  twitter: @bantonsson <http://twitter.com/#!/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 akka-user+unsubscr...@googlegroups.com.
>> To post to this group, send email to akka-user@googlegroups.com.
>> 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 akka-user+unsubscr...@googlegroups.com.
> To post to this group, send email to akka-user@googlegroups.com.
> 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 <http://typesafe.com/> – Reactive Apps on the JVM
> twitter: @bantonsson <http://twitter.com/#!/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 akka-user+unsubscr...@googlegroups.com.
> To post to this group, send email to akka-user@googlegroups.com.
> 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 akka-user+unsubscr...@googlegroups.com.
To post to this group, send email to akka-user@googlegroups.com.
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