Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
如何在erlang gen_服务器中有效地使用receive子句来解决超时错误?_Erlang_Gen Server - Fatal编程技术网

如何在erlang gen_服务器中有效地使用receive子句来解决超时错误?

如何在erlang gen_服务器中有效地使用receive子句来解决超时错误?,erlang,gen-server,Erlang,Gen Server,有时,由于超时,我的循环返回ok。如何以正确的方式编写此代码。当超时时,它只返回ok,而不是我假设的实际值。在handle调用中,我调用了一个函数loop(),在loop()函数中,我接收到一条带有receive子句的消息。现在,我使用loop2函数将此数据发送到我的数据库,该函数从数据库返回响应,无论数据是否已成功保存,并将响应返回到loop()。但如果有超时,我的循环函数返回ok,但不是实际值 %@作者:泽山·艾哈迈德 %@日期:2020-12-22 05:06:12 %@最后修改人:泽山·

有时,由于超时,我的循环返回ok。如何以正确的方式编写此代码。当超时时,它只返回ok,而不是我假设的实际值。在handle调用中,我调用了一个函数loop(),在loop()函数中,我接收到一条带有receive子句的消息。现在,我使用loop2函数将此数据发送到我的数据库,该函数从数据库返回响应,无论数据是否已成功保存,并将响应返回到loop()。但如果有超时,我的循环函数返回ok,但不是实际值

%@作者:泽山·艾哈迈德
%@日期:2020-12-22 05:06:12
%@最后修改人:泽山·艾哈迈德
%@上次修改时间:2021-01-10 04:42:59
-模块(getAccDataCons)。
-行为(gen_服务器)。
-include_lib(“deps/amqp_client/include/amqp_client.hrl”)。
-导出([开始链接/0,停止/0])。
-导出([init/1,handle\u call/3,handle\u cast/2,handle\u info/2,code\u change/3,
终止/2])。
-导出([get_account/0])。
启动链接()->
gen_服务器:启动链接({local,?MODULE},?MODULE,[],[])。
停止()->
发电机服务器:强制转换(?模块,停止)。
获取帐户()->
gen_服务器:调用(?MODULE,{get_account})。
初始化(_Args)->
{ok,Connection}=amqp_Connection:start(#amqp_params_network{host=“localhost”}),
{ok,Channel}=amqp_连接:打开_通道(连接),
{好的,频道}。
handle_call({get_account},_From,State)->
amqp_通道:调用(状态,#'exchange.declare'{exchange=,type=}),
amqp_通道:调用(状态,#'queue.declare'{queue=}),
装订=
#'queue.bind'{exchange=,,
路由_键=,
队列=},
#'queue.bind_ok'{}=amqp_通道:调用(状态,绑定),
io:format(“[*]正在等待日志。要退出,请按CTRL+C~n”),
amqp_通道:调用(状态为#'basic.consume'{queue=,no_ack=true}),
返回=循环(),
io:格式(“~nReti=~p”,[Returned]),
{回复,返回,状态};
处理呼叫(消息、发件人、状态)->
io:format(“接收到的其他句柄调用消息:~p~n”,[message]),
{回复,好的,陈述}。
手柄(停止、状态)->
{停止,正常,状态};
handle_cast(消息、状态)->
io:format(“接收到的其他句柄\u cast调用:~p~n”,[Message]),
{诺雷普利州}。
句柄信息(消息、状态)->
io:格式(“收到的句柄信息消息:~p~n”,[message]),
{诺雷普利州}。
代码更改(旧版本、状态、额外)->
{好的,州政府}。
终止(原因,状态)->
io:format(“服务器正在终止,原因为:~p~n”,[reason])。
循环()->
接收
#'basic.consumer_ok'{}->ok
完,,
接收
{#'basic.deliver'{},Msg}->
#amqp_msg{payload=payload}=msg,
值=回路2(有效负载),
价值
2000年后->
io:格式(“服务器超时”)
结束。
环路2(有效负载)->
结果=jiffy:解码(有效载荷),
{[{,AccountId}]}=Result,
Doc={[{,AccountId}]},
getAccDataDb:创建\u AccountId\u视图(),
返回=案例getAccDataDb:getAccountNameDetails(文档)
成功->
Respo=getAccDataDb:getAccountNameDetails1(文档),
Respo;
详细信息\u不匹配->
用户不存在
完,,
返回。