postRetweet :: IO [TweetIdStr] -> IO [Status]
postRetweet tweetId = do
let response1 = tweetId >>= \tweetId1 -> mapM (\tid -> (postWith authenticate (retweetUrl++tid++".json") (DB.pack "ABC")) ) tweetId1
response1 >>= \rid -> (mapM (\x -> pure (x^. responseStatus) ) rid)
以上代码是根据tweetId转发推文 如果转发单个推文失败,我会收到例外。如何处理?
使用试试我做了
postRetweet :: IO [TweetIdStr] -> IO [Status]
postRetweet tweetId = do
tweetId >>= \tweetId1 -> (CM.foldM (\arr tid -> ((try (postWith authenticate (retweetUrl++tid++".json") (DB.pack "ABC")) ):: IO (Either SomeException (Response BL.ByteString)) ) >>=
\sc ->
case sc of
Right val -> if (val ^. responseStatus ^. statusCode)==200
then pure (arr++[val ^. responseStatus])
else pure (arr)
Left x -> pure (arr) ) [] tweetId1 )
答案 0 :(得分:0)
使用try/catch
实现异常处理和/或构建可能存在错误的类型,例如: IO (Either Error Result)
。