2017-10-04 107 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