Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir ';接听电话';超时_Elixir_Gen Server - Fatal编程技术网

Elixir ';接听电话';超时

Elixir ';接听电话';超时,elixir,gen-server,Elixir,Gen Server,我正在从genserver中的handle info函数调用elixir genserver,以添加从客户端获取的电话号码。但一旦handle_调用被调用,所有者进程就会崩溃[超时]。请帮忙 全局创建一个ETS,以在调用下面所述的任何函数之前插入值 def handle_info(消息、状态)do {a,b}=消息 phonenumber=b[:正文] 添加电话号码 {:诺雷普利州} 结束 def添加(电话号码)do 调用(_模块,{:add,phonenumber}) 结束 def handl

我正在从genserver中的handle info函数调用elixir genserver,以添加从客户端获取的电话号码。但一旦handle_调用被调用,所有者进程就会崩溃[超时]。请帮忙

全局创建一个ETS,以在调用下面所述的任何函数之前插入值

def handle_info(消息、状态)do
{a,b}=消息
phonenumber=b[:正文]
添加电话号码
{:诺雷普利州}
结束
def添加(电话号码)do
调用(_模块,{:add,phonenumber})
结束
def handle_调用({:add,phonenumber},from,state)do
:ets.insert(:access_table,{:details,phonenumber})
回复={:好的,“在配置文件中添加了{phonenumber}”
新的_状态=[{username}|状态]
{:回复,回复,新州}
结束
错误:

**当服务器状态==[]
**终止原因==
**{超时,{gen_server,call,['Elixir.Bankrecord',{add,“346534543534”},5000]}
**(从#PID退出)在::gen_server.call中退出(Bankrecord,{:add,'346534543534'},5000)
**(退出)超时

您不能在通话中呼叫自己,就像您的handle\u info调用
add
在gen\u服务器上执行回拨一样。由于所有操作都是在gen_服务器中按顺序进行的,因此最终会阻塞自己。解决方案应该是在模块上使用一个简单的私有
add
函数,并同时具有
handle\u info
handle\u调用({:add
delegate)

def add(电话号码)do
调用(_模块,{:add,phonenumber})
结束
def handle_info({uu,message},state)do
添加号码消息[:正文]
{:诺雷普利州}
结束
def handle_调用({:add,phonenumber},from,state)do
添加电话号码
{:回复,{:好的,{phonenumber}添加到配置文件“},[{username}}状态]}
结束
defp添加号码(电话号码)do
:ets.insert(:access_table,{:details,phonenumber})
结束

谢谢Chris,由于我是长生不老药的新手,您是否可以分享一些解决我问题的代码示例。非常感谢。我添加了一个函数delegationWorks的示例,如charm,仍然是最后一个查询Chris[如果您可以帮助]。我在想,当我的handle_信息没有返回任何信息时,我如何使用handle_call将回复发送回带有ETS电话号码更新列表的客户端。只是有点困惑,无法理解genserver的流程。您可能想要回复/2