Parallel http queries: how?

237 views
Skip to first unread message

Vadym Chekan

unread,
Nov 21, 2017, 4:05:40 PM11/21/17
to Elm Discuss
Hi all,

My app needs to get data from 2 sources upon initialization. Those two data sources are independent and can be queried in parallel. How do I do it?
I tried to use RemoteData.map2, but it consumes RemoteData structures and I do not know how to produce it because sendQuery produces command and most of the functions produce commands and not RemoteData.
I perhaps can do it with Task and Process, but it seems too low-level for such a trivial problem.
Could somebody help me to connect the dots please?

Vadym.


Michael Jones

unread,
Nov 22, 2017, 8:08:06 AM11/22/17
to Elm Discuss
I don't think you need to worry about explicitly being parallel. Http requests will be parallel by default due to their async nature in the Javascript runtime. 

You can have your app initialisation return two commands, one for each http request and then handle their responses separately. You can use Cmd.batch to group a list of commands into a single command to return as the 'init' signature needs to only have a single command.

Does that help?
Michael

Vadym Chekan

unread,
Nov 22, 2017, 8:23:51 PM11/22/17
to Elm Discuss
Thanks, it does execute it in parallel. But it is not obvious from API. Also, it is not intuitive to look for http related solutions in Cmd module.

Vadym.

Frank Bonetti

unread,
Nov 28, 2017, 2:52:52 PM11/28/17
to Elm Discuss
The only way to execute two Tasks in parallel is to use Cmd.batch. You would think that Task.map2, Task.map3, Task.map4, etc. would execute all tasks in parallel similar to Promise.all, but it doesn't. From the documentation for Task.map2:

> Put the results of two tasks together. If either task fails, the whole thing fails. It also runs in order so the first task will be completely finished before the second task starts.
Reply all
Reply to author
Forward
0 new messages