0

我对苦艾酒的这种行为感到困惑。

对于顶级字段,例如

    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(如果返回的数据首先是一个空数组,那将是理想的,我不明白为什么不是。

4

1 回答 1

2

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

于 2021-04-22T23:07:29.843 回答