使用HTTPoison初始化模块属性

时间:2018-06-19 14:58:10

标签: elixir httpoison

我正在尝试像这样初始化模块属性

  response = HTTPoison.get! url
  {:ok, response} = Poison.decode(response.body)
  @attr response

我以前使用文件来完成此操作,

  @external_resource file = Path.join([__DIR__, "file.txt"])
  Module.register_attribute __MODULE__, :attr, accumulate: true

  for line <- File.stream!(file, [], :line) do
    @attr line
    ...

使用HTTPoison并获取API的响应是否可能做同样的事情? 我收到此错误:

== Compilation error in file lib/module.ex ==
** (ArgumentError) argument error
    (stdlib) :ets.lookup_element(:hackney_config, :mod_metrics, 2)
    /project/deps/hackney/src/hackney_metrics.erl:27: :hackney_metrics.get_engine/0
    /project/deps/hackney/src/hackney_connect.erl:69: :hackney_connect.create_connection/5
    /project/deps/hackney/src/hackney_connect.erl:37: :hackney_connect.connect/5
    /project/deps/hackney/src/hackney.erl:316: :hackney.request/5
    lib/httpoison/base.ex:630: HTTPoison.Base.request/9
    lib/httpoison.ex:66: HTTPoison.request!/5
    lib/module.ex:4: (module)

1 个答案:

答案 0 :(得分:5)

从属应用程序在编译时不会自动启动。使用前,您需要明确启动HTTPoison

HTTPoison.start()
response = HTTPoison.get! url
{:ok, response} = Poison.decode(response.body)
@attr response