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

时间:2015-05-30 23:14:08

标签: erlang elixir

我有以下功能:

<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.css" rel="stylesheet"/>

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.js"></script>

<select style="width: 200px;" id="single">
  <option value="AL">Alabama</option>
  <option value="AK">Alaska</option>
  <option value="AZ">Arizona</option>
</select>

<button type="button" data-target="#single">Search for 'Arizona'</button>
<br /><br />

<select style="width: 200px;" id="multiple" multiple="multiple">
  <option value="AL">Alabama</option>
  <option value="AK">Alaska</option>
  <option value="AZ">Arizona</option>
</select>

<button type="button" data-target="#multiple">Search for 'Arizona'</button>

我收到错误:

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

我假设是因为(ArgumentError) argument error :erlang.send(:undefined, ... 进行了一些信息收集,而当我打电话给Node.connect时它尚未完成。如果我确实投入:global.whereis_name,我就不会收到错误。有更优雅的解决方案吗?我想重复:timer.sleep(1000)直到成功或达到超时。

编辑:

我应该提一下,我已经注册了一个名为:global.whereis_name的节点。

1 个答案:

答案 0 :(得分:8)

您可以在:global.sync()

之前执行:global.whereis_name(id)