【问题标题】:Absinthe returns an array that contains one null value instead of an empty arrayAbsinthe 返回一个包含一个空值的数组,而不是一个空数组
【发布时间】: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) 上让我头疼,我不确定是否有任何方法可以轻松解决这个问题。如果返回的数据首先是一个空数组,那将是理想的,我不明白为什么不是。

【问题讨论】:

    标签: graphql elixir apollo vue-apollo absinthe


    【解决方案1】:

    在发布此问题后,我立即意识到很可能我的解析器没有返回 {:ok, []}...事实上,由于 Ecto 查询错误(:left_join 而不是:join)。这就是返回的 JSON 包含 [null] 的原因。在这种情况下,我只需要修复我的解析器函数以实际返回{:ok, []}。我想写一篇关于某个问题的文章确实有助于理清你的想法。

    【讨论】:

    • “我想写一个问题确实有助于理清你的想法。”:Rubber duck debugging
    • @M.Justin M.Justin 是的
    猜你喜欢
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 2012-07-14
    • 2011-10-10
    • 2019-06-05
    • 2022-01-19
    • 2020-01-11
    • 1970-01-01
    相关资源
    最近更新 更多