Ich frage mich, ob ich Hilfe bei der Iteration einer Liste von Gruppen bekommen kann, eine POST-Anfrage für jede Gruppe einen Raum erstellen, Iteration der Benutzer für jede Gruppe und machen eine POST-Anfrage, um sie diesem bestimmten Raum zuzuweisen.Elm: Iterate Liste Ausführen von mehreren HTTP-Anfragen
Ich habe folgendes Modell.
model = {
groups = [
{
title = "Foo"
, users = [
{ name = "Joe" }
, { name = "Mary" }
]
},
{
title = "Bar"
, users = [
{ name = "Jill" }
, { name = "Jack" }
]
}
]
}
Das gewünschte Ergebnis ist, dass der Raum Foo wurde erstellt und Joe und Mary wurden zugewiesen und Bar wurde erstellt und Jill und Jack zugewiesen wurden.
Die Ansicht, für jetzt, wäre nur eine einfache Schaltfläche, die eine Aktion auslöst.
div []
[ button [ onClick InviteUsersToRoom ] [ text "Invite users to room" ] ]
Ich habe 2 erstellt POST-Anfragen:
createRoom: Nehmen Sie ein
title
, schaffen einen Raum dertitle
mit und schicken Sie dasroom_id
addUser: nehmen a
room_id
undname
eines Benutzers, fügen Sie die Benutzer dem Raum hinzu und geben Sie den Statuszurück
Beispiel:
-- create a room for each group
-- passing in `title` as the room name
-- which will return the room id from `decodeCreateRoomResponse`
createRoom : String -> String -> Cmd Msg
createRoom title =
Task.perform
CreateRoomsFail
CreateRoomsSuccess
(Http.post
decodeCreateRoomResponse
("https://some_api?room=" ++ title)
Http.empty
)
decodeCreateRoomResponse : Json.Decoder String
decodeCreateRoomResponse =
Json.at ["room", "id"] Json.string
-- add a user to a room using a `room_id` and the user's name
-- returns a bool from `decodeAddUserResponse`
addUser : String -> String -> Cmd Msg
addUser room_id user =
Task.perform
AddUserFail
AddUserSuccess
(Http.post
decodeCreateChannelResponse
("https://some_api?room=" ++ room_id ++ "&user=" ++ user)
Http.empty
)
decodeAddUserResponse : Json.Decoder String
decodeAddUserResponse =
Json.at ["ok"] Json.bool
Ich frage mich, wie Sie diese über Vernähen insgesamt gehen würde, so dass Onclick:
- Iterierte jede Gruppe
- das machen POST zum Erstellen des Raums
- nehmen Sie die room_id aus der Antwort und iterieren die Benutzer
- POST die room_id und die Benutzer nennen
Jede Hilfe sehr geschätzt wird.
Vielen Dank für Ihre ausführliche Antwort. Ich lerne immer so viel von deinen Antworten! –