【发布时间】:2020-05-10 12:21:33
【问题描述】:
社区!
我是 Elixir 的新手,遇到了一个问题。 我正在 Phoenix 上制作 API 并坚持一种模式:
-
{:ok, some_data}成功 -
{:error, some_data}出错。
我的控制器请求了域:
with {:ok, some_data} <- Organisation.create(...) do
end
域反过来请求某些服务:
with {:ok, service_data} when length(service_data) == 0 <- SomeService.get(...) do
{:ok, [1, 2, 3]} # Some other LIST data
end
所以,如果when length(service_data) == 0 变成True,那么服务将返回
{:ok, [1, 2, 3]},但如果是False,那么服务将返回{:ok, service_data} - 这是不可接受的!
在这种情况下我该怎么办?是否有任何最佳做法。
附:不能使用case 过滤返回,因为两个返回都是{:ok, []}。
【问题讨论】:
-
length(service_data) > 0时你希望函数返回什么? -
问题是当列表为空时它会返回
{:ok, [1, 2, 3]}。你想对非空列表也一样吗? -
您能否将每个案例的预期输入/输出添加到问题中?
-
如果
length(service_data) = 0将返回{:ok, [1, 2, 3]}如果length(service_data) > 0将返回一些错误,我认为,或者这是不可能的? -
我想使用
with do end构造,因为“创建”逻辑由几个动作组成。