Erlang 新手,只是在理解新范式时遇到了一些麻烦!
好的,所以我在 OTP gen_server 中有这个内部函数:
my_func() ->
Result = ibrowse:send_req(?ROOTPAGE,[{"User-Agent",?USERAGENT}],get),
case Result of
{ok, "200", _, Xml} -> %<<do some stuff that won't interest you>>
,ok;
{error,{conn_failed,{error,nxdomain}}} -> <<what the heck do I do here?>>
end.
如果我忽略了处理连接失败的情况,那么我会收到一个传播到主管的退出信号,它会与服务器一起关闭。
我想要发生的事情(至少我认为这是我想要发生的事情)是在连接失败时我想暂停然后重试 send_req 说 10 次,此时主管可能会失败。
如果我做这种丑陋的事情......
{error,{conn_failed,{error,nxdomain}}} -> stop()
它会关闭服务器进程,是的,我可以使用我的(在 10 秒内尝试 10 次)重启策略,直到它失败,这也是预期的结果,但是当我从服务器到主管的返回值是“好的”时真的很想返回 {error,error_but_please_dont_fall_over_mr_supervisor}。
在这种情况下,我强烈怀疑我应该处理所有业务问题,例如在“my_func”中重试失败的连接,而不是试图让进程停止,然后让主管重新启动它以便再次尝试。
问题:在这种情况下,“Erlang 方式”是什么?