2016-05-09 5 views
2

Ich bin (Anfänger) eine Art Problem mit der Kette zu HTTP-Aufrufen in meiner Elm Anwendung versucht:Elm: Ketten Http.send und Http.get

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

Dies liegt daran, Http.send Rückgabetyp ist Task RawError Response , und Http.get Rückgabetyp ist Task Error value.

Irgendwelche Vorschläge, wie sie zusammenarbeiten können?

EDIT1:

Vielleicht mapError ist die Lösung?

EDIT2:

Ich sage nicht, dass der erste Anruf fehlgeschlagen ist, ich bin sicher, dass es funktioniert. Es ist der Compiler, der nicht meinen Code nicht bestätigen:

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

Können Sie zeigen, sind vollständige Beispiel, einschließlich der genauen Fehlermeldung? –

+0

@ SørenDebois Ja, ich habe gerade meine Nachricht herausgegeben. –

Antwort

1

Sie einen Weg, um ein RawError zu einem Error zur Karte braucht, und dann können Sie verwenden Task.mapError, wie Sie in Ihrem ersten bearbeiten vorgeschlagen. Eine Möglichkeit wäre:

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

Es scheint die richtige technische Antwort zu sein, aber ich entschied mich, nur die allgemeinere 'Http.send' Methode in meinem Code für die Konsistenz zu verwenden. –