2016-12-19 12 views
0

私はelmでGETリクエストを実行しようとしています。この関数は、実行しようとしているTaskを返します。残念ながら、私の参考資料はElm 0.17です。私が収集したのは、Task.performのサインタが変更されたことです。Elm 0.18 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 

これは私のGET要求とタスクを実行するコマンドの機能です。 AuthErrorとGetTasksSuccessはどちらも私が定義したMessagedです。私は仕事のための新しいsignaturが

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

で行うことエルムドキュメントで読んだことがどのような私は私のコマンドが作業を取得するために実装するためにしなければならないのですか?

+0

はい、コンパイラは、戻り値がCmd msgではなく、Cmd Msgからのものであると示しています。また、 – Essometer

+0

の後に私は助けへの私の答えを更新しました –

+0

ダブル投稿のため申し訳ありません、私の元のコメントを編集することはできません。 また、fetchTaskCmdコマンドを送信した後、解析されたJSONはどこにありますか?それとも、結果を文字列形式のgetだけで取得するのですか? – Essometer

答えて

2

変更点はあなたが提案したものよりも大きく、現在、Httpライブラリは主にコマンドで動作していて、タスクでは機能していません。だから今、それを書くための方法がある:あなたがトークンを使用する場合は

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) 

はあなたも助けるために私のelm-jwtライブラリを使用して検討する必要があります。

関連する問題