2016-05-09 5 views
2

私は(初心者)ですが、私のエルムアプリケーションでHTTP呼び出しにチェーンにしようタイプの問題を持つ:エルム:チェーンHttp.sendとHttp.get

Http.send ... `Task.andThen` (\_ -> Http.get ...) 

Http.send戻り値の型がTask RawError Responseあるためです、 およびHttp.get戻り値の型はTask Error valueです。

どのように連携させるかについてのご意見はありますか?

EDIT1:

たぶんmapErrorソリューションですか?

EDIT2:

私は、私はそれが動作すると確信している、最初の呼び出しが失敗したことを言っていません。

The right argument of `andThen` is causing a type mismatch. 

135│  Http.send Http.defaultSettings config 
136│>  `Task.andThen` (\_ -> Http.get (Json.Decode.list userJsonDecoder) "http://localhost:3000/") 

`andThen` is expecting the right argument to be a: 

    Http.Response -> Task Http.RawError a 

But the right argument is: 

    Http.Response -> Task Http.Error (List User) 
+1

正確なエラーメッセージを含む完全な例ですか? –

+0

@SørenDeboisはい、私はただメッセージを編集しました。 –

答えて

1

あなたはErrorRawErrorをマッピングする方法が必要ですし、あなたの最初の編集で提案されているように、あなたがTask.mapErrorを使用することができます:それは私のコードを検証しませんコンパイラです。 1つの可能性は:

rawErrorToError : Http.RawError -> Http.Error 
rawErrorToError rawError = 
    case rawError of 
    Http.RawTimeout -> Http.Timeout 
    Http.RawNetworkError -> Http.NetworkError 

Http.send Http.defaultSettings config 
|> Task.mapError rawErrorToError 
`Task.andThen` ... 
+0

これは正しい技術的な答えのようですが、一貫性のためにコード内でより汎用的な 'Http.send'メソッドを使用することにしました。 –