我正在使用hedis,并尝试处理服务器崩溃的情况。根据文档:
现在,如果我在建立连接和运行命令之间杀死redis服务器,我会得到我期望的结果:
这给了我:
因此,我认为我想要捕获ConnectionLostException异常。然而,虽然我似乎可以正确地捕获它,但它似乎也会冒泡到顶部,我不知道为什么。这里是一些代码(只是在GHCI中运行):与服务器的连接丢失: 在连接丢失的情况下,命令函数会抛出ConnectionLostException异常。它只能在runRedis之外被捕获。
:set -XOverloadedStrings
import Database.Redis
import Control.Exception
conn <- connect defaultConnectInfo
runRedis conn $ ping
现在,如果我在建立连接和运行命令之间杀死redis服务器,我会得到我期望的结果:
所以我尝试做以下操作(我添加了⟨interactive⟩: ConnectionLost *** Exception: ConnectionLost
>>= evaluate
以尝试强制评估错误,但没有任何区别):let tryR = try :: IO a -> IO (Either ConnectionLostException a)
tryR . (>>= evaluate) . runRedis conn $ ping
这给了我:
所以我得到了预期的左侧 Con: 连接丢失 nectionLost
Left
结果,但在异常处理程序运行到一半时,GHCI 也可能会捕获并显示异常。这是因为有些东西没有被评估吗?