2016-12-19 1 views
0

J'essaye d'effectuer une demande de GET dans l'orme. La fonction renvoie une tâche que j'essaie d'effectuer. Malheureusement, mon matériel de référence est Elm 0.17 et ce que j'ai compris, c'est que la signature pour Task.perform a changé.Elm 0.18 demandes Http

fetchTasks: MyModel -> String -> Platform.Task Http.Error (Dict String MyTask) 
fetchTasks model apiUrl= 
    { method   = "GET" 
    , headers   = [ Http.header "Content-Type" "application/json" 
         , Http.header "Authorization" model.token ] 
    , url    = apiUrl 
    , body   = Http.emptyBody 
    , expect   = Http.expectJson (dict taskDecoder) 
    , timeout   = Nothing 
    , withCredentials = False } 
    |> Http.request 
    |> Http.toTask 



fetchTaskCmd : MyModel -> String -> Cmd Msg 
fetchTaskCmd model apiUrl = 
    Task.perform AuthError GetTasksSuccess <| fetchTasks model apiUrl 

Ceci est ma fonction pour la demande GET et la commande qui effectue les tâches. Les AuthError et GetTasksSuccess sont Messaging que j'ai définis. Ce que j'ai lu dans le Elm Docs que la nouvelle signatur pour tâche Perform est

perform : (a -> msg) -> Task Never a -> Cmd msg 

Que dois-je faire pour mettre en œuvre pour obtenir ma commande de travail?

+0

Oui, mais le compilateur dit que la valeur renvoyée est du type Cmd msg, pas Cmd Msg. En outre, après – Essometer

+0

j'ai mis à jour ma réponse pour aider –

+0

Désolé pour le double post, ne peut pas éditer mon commentaire original. De même, après avoir envoyé la commande fetchTaskCmd, où est mon JSON analysé par la suite? Ou est-ce que je reçois en résultat seulement la forme de chaîne ma obtenir la demande? – Essometer

Répondre

2

Les modifications sont plus importantes que vous ne le suggérez, la bibliothèque Http fonctionnant désormais principalement avec des commandes et non des tâches. Donc, la façon de l'écrire est maintenant:

makeRequest model apiUrl= 
    Http.request 
    { method   = "GET" 
    , headers   = [ Http.header "Content-Type" "application/json" 
         , Http.header "Authorization" model.token ] 
    , url    = apiUrl 
    , body   = Http.emptyBody 
    , expect   = Http.expectJson (dict taskDecoder) 
    , timeout   = Nothing 
    , withCredentials = False } 




fetchTaskCmd : (Result Error a -> Msg) -> MyModel -> String -> Cmd Msg 
fetchTaskCmd msgConstructor model apiUrl = 
    Http.send msgConstructor (makeRequest model apiUrl) 

Si vous voulez utiliser des jetons que vous pouvez également envisager d'utiliser ma bibliothèque elm-jwt pour aider.