我在Plug.Conn
上进行了一系列转换,需要访问中间结果。
n_conn =
conn
|> Plug.Conn.fetch_query_params()
nn_conn =
n_conn
|> assign(:result, inspect(Timestamp.convert_datetime(n_conn.params)))
nn_conn
|> send_resp(200, nn_conn.assigns.result)
|> halt()
我需要n_conn
因为conn.params
在调用Plug.Conn.fetch_query_params()
之前未设置。同样,我需要nn_conn
因为n_conn.assigns.result
在调用assign/3
函数之前未设置。
代码相当丑陋。如果有一种方法可以引用管道操作符的输出,我可以像下面那样简化它。我希望&1
可以工作,但事实并非如此。
conn
|> Plug.Conn.fetch_query_params()
|> assign(:result, inspect(Timestamp.convert_datetime(&1.params)))
|> send_resp(200, &1.assigns.result)
|> halt()
有没有办法解决这个问题?
答案 0 :(得分:2)
如果您只想通过管道执行此操作,则可以传递匿名函数,但it's ugly。我重复使用名称conn
而不使用管道进行单个函数调用:
conn = Plug.Conn.fetch_query_params(conn)
conn = assign(conn, :result, inspect(Timestamp.convert_datetime(conn.params)))
conn
|> send_resp(200, conn.assigns.result)
|> halt()
由于您似乎没有使用conn.assigns.result
,因此您可以跳过将其存储在assigns
中:
conn = Plug.Conn.fetch_query_params(conn)
result = inspect(Timestamp.convert_datetime(conn.params))
conn
|> send_resp(200, result)
|> halt()