2017-10-04 1 views
1

j'ai une fonction de mise à jour tels que:match Motif toutes les erreurs HTTP

update : Msg -> Model -> (Model, Cmd Msg) 
update msg model = 
    case msg of 
     NewImages (Ok images) -> 
      ({model|images = images}, Cmd.none) 

     NewImages (Err error) -> 
      myFunction model 

     NewUsers (Ok users) -> 
      ({model|users = users}, Cmd.none) 

     NewUsers (Err error) -> 
      myFunction model 

     [...] 

et une fonction myFunction que je voudrais appeler chaque fois que je reçois un HTTP.Error.

Apparemment, _ ne peut pas être utilisé pour correspondre seulement le début d'un modèle comme dans

update : Msg -> Model -> (Model, Cmd Msg) 
update msg model = 
    case msg of 
     NewImages (Ok images) -> 
      ({model|images = images}, Cmd.none) 

     NewUsers (Ok users) -> 
      ({model|users = users}, Cmd.none) 

     _ (Err error) -> 
      myFunction model 

     [...] 

Alors, quelle serait la bonne façon de faire correspondre tous Http.Error dans ma fonction de mise à jour?

Répondre

5

Je ne sais pas comment faire correspondre tous Http.Error s dans la fonction de mise à jour, mais vous pouvez mapper tous Http.Error s à un message dédié.

type Msg 
    = NewImages (List String) 
    | ... 
    | HttpError Http.Error 

send : (a -> Msg) -> Request Http.Error a -> Cmd Msg 
send tagger request = 
    let 
     makeMsg result = 
      case result of 
       Ok a -> 
        tagger a 

       Err error -> 
        HttpError error 
    in 
     Http.send makeMsg request 

-- and make an HTTP request like: 
send NewImages request 

Ensuite, vous pouvez faire correspondre toutes vos erreurs HTTP.

update msg model = 
    case msg of 
     NewImages images -> 
      ({ model | images = images }, Cmd.none) 

     ... 

     HttpError error -> 
      myFunction error