在使用之前等待Node.connect:global.whereis_name

ary*_*ard 8 erlang elixir

我有以下功能:

  def join(id) do
    if Node.connect(:"#{id}@127.0.0.1") do
      send :global.whereis_name(id), {:join, id}
    end
  end
Run Code Online (Sandbox Code Playgroud)

我收到错误:

(ArgumentError) argument error
               :erlang.send(:undefined, ...
Run Code Online (Sandbox Code Playgroud)

我假设是因为Node.connect有些信息的收集,当我打电话时还:global.whereis_name没有完成.如果我:timer.sleep(1000)确定,我没有得到错误.有更优雅的解决方案吗?我想重复,:global.whereis_name直到成功或达到超时.

编辑:

我应该提一下,我已经注册了一个名称的节点id.

Kab*_*bie 8

:global.sync()以前可以做一个:global.whereis_name(id)