0

对不起新手的问题(和我的英语):)

我尝试编写以下函数:

  • 该函数从URL1下载内容(作为参数接收)
  • 该函数解析此内容并提取URL2
  • 该函数从URL2下载内容
  • URL2的内容是这个函数的结果
  • 如果发生错误,此函数应返回 Nothing

我知道如何执行 HTTP 请求。我有一个函数来解析来自URL1的请求。但我不知道如何:

  • 使用提取的URL2执行新请求
  • 如果未提取URL2 (或URL1中发生错误) ,则忽略第二个请求
4

2 回答 2

1

我原则上你想要这样的东西:

import Maybe
import Http

type Url = String
getContentFromUrl : Maybe Url -> Maybe String
getContentFromUrl url = --your implementation
extractUrlFromContent : Maybe String -> Maybe Url
extractUrlFromContent content = --your implementation
content = getContentFromUrl (Just "http://example.com") 
          |> extractUrlFromContent 
          |> getContentFromUrl
于 2014-11-03T22:06:58.567 回答
1

发送 Http 意味着与外界对话,这涉及到SignalElm 中的 s。因此,来自URL2的最终结果将打包在一个Signal. 只要您对此感到满意,您就可以使用 Maybe 返回 in a Maybein a的内容Signal。例如:

import Maybe
import Http

-- helper functions
isSuccess : Http.Response a -> Bool
isSuccess response = case response of
  Http.Success _ -> True
  _              -> False

responseToMaybe : Http.Response a -> Maybe.Maybe a
responseToMaybe response = case response of
  Http.Success a -> Just a
  _              -> Nothing

parseContentAndExtractUrl : String -> String
parseContentAndExtractUrl = identity -- this still requires your implementation

-- URL1
startUrl : String
startUrl = "www.example.com" -- replace this with your URL1

result1 : Signal (Http.Response String)
result1 = Http.sendGet <| constant startUrl

-- URL2
secondUrl : Signal String
secondUrl = result1
  |> keepIf isSuccess (Http.Success "")
  |> lift (\(Http.Success s) -> s)
  |> lift parseContentAndExtractUrl

result2 : Signal (Maybe String)
result2 = secondUrl
  |> Http.sendGet
  |> lift responseToMaybe

请注意,有计划使所有这些更容易使用:https ://groups.google.com/d/topic/elm-discuss/BI0D2b-9Fig/discussion

于 2014-11-04T11:07:59.263 回答