微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Absinthe 返回一个包含一个空值而不是空数组的数组

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?