2017-10-04 108 views
1

我有一个更新的功能,如:模式匹配所有的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 

     [...] 

和功能myFunction,我想打电话给我每次得到一个时间HTTP.Error。

显然,_不能使用只匹配的图案像

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 

     [...] 

所以一开始,这将是匹配在我的更新功能都Http.Error的正确方法?

回答

5

我不知道如何匹配更新功能中的所有Http.Error,但您可以将所有Http.Error s映射到专用消息。

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 

然后你可以匹配所有的HTTP错误。

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

     ... 

     HttpError error -> 
      myFunction error