什么';在Erlang中处理异步工作的规范方法是什么?
我有JavaScript方面的经验,并且习惯于回调函数:什么';在Erlang中处理异步工作的规范方法是什么?,erlang,Erlang,我有JavaScript方面的经验,并且习惯于回调函数: function myFun(arg1, arg2, successCB, failCB) { var sum = arg1 + arg2; if (sum > tooHigh) { failCB("too high!"); } else { otherFun(sum, arg1, successCB, failCB); } } 我可以用Erlang编写相同的代码: my_fun(Arg1, Arg
function myFun(arg1, arg2, successCB, failCB) {
var sum = arg1 + arg2;
if (sum > tooHigh) {
failCB("too high!");
} else {
otherFun(sum, arg1, successCB, failCB);
}
}
我可以用Erlang编写相同的代码:
my_fun(Arg1, Arg2, SuccessCB, FailCB) ->
case Arg1 + Arg2 of
Sum when Sum > ?TOO_HIGH ->
FailCB(too_high);
Sum ->
other_fun(Sum, Arg1, SuccessCB, FailCB)
end.
根据我的经验,我觉得这种方法是合理的,但我觉得我需要在代码中做很多这方面的工作,因此,显然,有更好的方法来管理这些真/假/任何场景
这是典型的Erlang代码吗?还有其他的方法吗?JavaScript使用回调,因为您只有一个线程,而回调是跨上下文开关传输状态的方式 回调函数通常是一个有用的工具,但在JavaScript中它们是一个基本工具,因为异步工作是通过回调函数完成的 在Erlang中,您可以(而且应该!)使用许多进程。在单个进程中,您可以进行同步、阻塞调用,因为这不会影响系统性能 我希望上述JS代码的Erlang版本如下所示
my_fun(Arg1, Arg2) ->
case Arg1 + Arg2 of
Sum when Sum > ?TOO_HIGH ->
too_high;
Sum ->
other_fun(Sum, Arg1)
end.
没有回调,因为函数返回值(
太高
,可能{ok,Result}
)。所有函数都被阻塞——如果other\u-fun
是网络调用,它可能会等待几秒钟再返回。如果需要并行性,您可以生成任意数量的进程。为什么不使用不同的函数子句呢?或者case User of
?您需要做好准备,因为如果您试图在Erlang中使用与在其他语言中相同的错误处理方法,那么您就错了。例如,尝试搜索Erlang的“让它崩溃”哲学,然后。