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 返回一个包含一个空值的数组,而不是一个空数组的主要内容,如果未能解决你的问题,请参考以下文章

将包含一些空值的CSV文件读入VBA数组

检查数据表中是不是包含空值的最佳方法

mysql中的ifnull()函数判断空值

使用javascript对数组进行排序而不改变空或空的地方

SQL语句中 聚合函数count()忽略空值么?

SQL 空值