Erlang gen_server displays invalid return value

I am trying to pass the gen_server message:

 gen_server:cast({global, ID}, {watchers}).

Handler:

handle_cast({watchers}, State) ->
    case State#table_state.watchers of
    [] ->
        {reply, no_watchers, State};
    _ ->
        {reply, State#table_state.watchers, State}
    end;

But when I execute gen_server:cast, gen_server fails:

=ERROR REPORT==== 29-Apr-2011::18:26:07 ===
** Generic server 1 terminating 
** Last message in was {'$gen_cast',{watchers}}
** When Server state == {table_state,1,"1",11,[]}
** Reason for termination == 
** {bad_return_value,{reply, no_watchers, {table_state,3,"3",11,[]}}}

Why am I getting bad_return_value?

+5
source share
1 answer

You cannot answer using listing (see gen_serverdocumentation ). This is the whole point of casting an asynchronous message instead of using a call.

In your case, you want to return the answer, so use gen_server:call/2instead.

+12
source

All Articles