如何解决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) 上让我很头疼,我不确定是否有任何方法可以轻松解决这个问题。如果返回的数据首先是一个空数组,那将是理想的,我不明白为什么不是。
解决方法
在发布这个问题后,我立即意识到我的解析器很可能根本没有返回 {:ok,[]}
......实际上,由于 Ecto 查询错误({ {1}} 而不是 {:ok [nil]}
)。这就是返回的 JSON 包含 :left_join
的原因。在这种情况下,我只需要修复我的解析器函数以实际返回 :join
。我想写一个问题确实有助于清除你对它的想法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。