gpt4 book ai didi

graphql - 如何处理 GraphQL 模式中的空值

转载 作者:行者123 更新时间:2023-12-01 10:20:06 25 4
gpt4 key购买 nike

我不断收到“无法为不可为 null 的字段 Airline.id 返回 null”。当 FlightSchedule.operatingAirline 为 null(根据架构完全有效)并且客户端查询 FlightSchedule.operatingAirline.id 时出错。如何解决这个问题?将 Airline.id、Airline.code 和 Airline.name 设置为可为 null 可以修复此问题,但不是解决此问题的正确方法,因为如果航空公司存在,这 3 个字段也将始终存在。以下是我的架构:

type Airline {
id: String!,
code: String!,
name: String!
}

type FlightSchedule {
airline: Airline!
operatingAirline: Airline
}

下面是我的查询:

  getFlightSchedules {
airline
{
id
code
name
}
operatingAirline
{
id
code
name
}
}

最佳答案

当解析过程中遇到错误时,字段将解析为空。这包括您遇到的验证错误。来自规范:

If during ExecuteSelectionSet() a field with a non‐null fieldType throws a field error then that error must propagate to this entire selection set, either resolving to null if allowed or further propagated to a parent field.

If this occurs, any sibling fields which have not yet executed or have not yet yielded a value may be cancelled to avoid unnecessary work.

换句话说,如果父字段是特定对象类型,并且该类型具有不可为空的字段,并且该字段解析为空,即parent 字段也将解析为 null。父字段不能返回无效的对象(在本例中是因为它有一个非空字段返回 null),所以它唯一能做的就是返回 null。当然,如果父字段本身不为空,则此行为会向上传播到树中,直到最终遇到可为空的字段。

那么,为什么会出现该错误?因为您的 operatingAirline 解析器返回 null。它返回某种对象(不完整的航空公司对象、数组、字符串或其他对象),然后 GraphQL 会有效地尝试将其强制转换为 Airline 类型。请求了 id 字段,但它根据 operatingAirline 的解析器返回的对象解析为 null。由于 id 被请求并返回 null,整个 operatingAirline 字段验证失败并返回 null。

关于graphql - 如何处理 GraphQL 模式中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53239983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com