Absinthe 返回一个包含一个空值的数组,而不是一个空数组
Posted
技术标签:
【中文标题】Absinthe 返回一个包含一个空值的数组,而不是一个空数组【英文标题】:Absinthe returns an array that contains one null value instead of an empty array 【发布时间】:2021-07-17 04:24:23 【问题描述】:我对 Absinthe 的这种行为感到困惑。
对于***字段,例如
field :projects, list_of(:project) do
arg :user_id, :string
resolve(&ProjectResolver.list_projects/2)
end
如果ProjectResolver.list_projects/2
返回:ok, []
,那么JSON结果会正确
"data":
"projects": []
但是,对于子字段,例如
中的tags
字段
object :task do
field :id, :string
# ... Other fields
field :tags, list_of(:tag) do
resolve(&TaskResolver.list_tags/3)
end
# ... Other subfields
end
如果TaskResolver.list_tags/3
返回:ok, []
,我得到
"data":
"task":
"id": "ba156cde-8c5f-4806-b161-62071b0098b3",
"tags": [
null
]
而不是
"data":
"task":
"id": "ba156cde-8c5f-4806-b161-62071b0098b3",
"tags": []
我认为应该是合理的回应。
现在包含一项 (null
) 的非空数组在前端 (apollo) 上让我头疼,我不确定是否有任何方法可以轻松解决这个问题。如果返回的数据首先是一个空数组,那将是理想的,我不明白为什么不是。
【问题讨论】:
【参考方案1】:在发布此问题后,我立即意识到很可能我的解析器没有返回 :ok, []
...事实上,由于 Ecto 查询错误(:left_join
而不是:join
)。这就是返回的 JSON 包含 [null]
的原因。在这种情况下,我只需要修复我的解析器函数以实际返回:ok, []
。我想写一篇关于某个问题的文章确实有助于理清你的想法。
【讨论】:
“我想写一个问题确实有助于理清你的想法。”:Rubber duck debugging @M.Justin M.Justin 是的以上是关于Absinthe 返回一个包含一个空值的数组,而不是一个空数组的主要内容,如果未能解决你的问题,请参考以下文章