@@ -4,7 +4,6 @@ layout: ../_core/DocsLayout
4
4
category : Learn
5
5
permalink : /learn/execution/
6
6
next : /learn/introspection/
7
-
8
7
---
9
8
10
9
一个 GraphQL 查询在被验证后,GraphQL 服务器会将之执行,并返回与请求的结构相对应的结果,该结果通常会是 JSON 的格式。
@@ -50,7 +49,7 @@ type Starship {
50
49
51
50
您可以将 GraphQL 查询中的每个字段视为返回子类型的父类型函数或方法。事实上,这正是 GraphQL 的工作原理。每个类型的每个字段都由一个 * resolver* 函数支持,该函数由 GraphQL 服务器开发人员提供。当一个字段被执行时,相应的 * resolver* 被调用以产生下一个值。
52
51
53
- 如果字段产生标量值,例如字符串或数字,则执行完成。但是, 如果一个字段产生一个对象,则该查询将继续执行该对象对应字段的解析器,直到生成标量值。GraphQL 查询始终以标量值结束。
52
+ 如果字段产生标量值,例如字符串或数字,则执行完成。如果一个字段产生一个对象,则该查询将继续执行该对象对应字段的解析器,直到生成标量值。GraphQL 查询始终以标量值结束。
54
53
55
54
## 根字段 & 解析器
56
55
@@ -106,7 +105,7 @@ GraphQL 服务端应用的业务取决于类型系统的结构。在 `human` 对
106
105
107
106
在这个例子中,对 name 字段的处理非常的清晰,name 字段对应的解析器被调用的时候,解析器回调函数的 obj 参数是由上层回调函数生成的 ` new Human ` 对象。在这个案例中,我们希望 Human 对象会拥有一个 ` name ` 属性可以让我们直接读取。
108
107
109
- 事实上在返回的字段可以直接从对象中获得并且没有额外定义解析器的时候,大部分 GraphQL 库可以让我们省略定义的步骤 。
108
+ 事实上,许多 GraphQL 库可以让你省略这些简单的解析器,假定一个字段没有提供解析器时,那么应该从上层返回对象中读取和返回和这个字段同名的属性 。
110
109
111
110
## 标量强制
112
111
@@ -122,7 +121,7 @@ Human: {
122
121
123
122
请注意,我们的类型系统声明 ` appearsIn ` 字段将返回具有已知值的枚举值,但是此函数返回数字!实际上,如果我们查看结果,我们将看到正在返回适当的枚举值。这是怎么回事?
124
123
125
- 这是一个强制标量的例子。因为类型系统已经被设定,所以解析器函数的返回值必须符合与类型系统对应的 API 规则的约束。在这个案例中, 我们可能在服务器上定义了一个枚举类型,它在内部使用像是 4、5 和 6 这样的数字,但在 GraphQL 类型系统中将它们表示为枚举值。
124
+ 这是一个强制标量的例子。因为类型系统已经被设定,所以解析器函数的返回值必须符合与类型系统对应的 API 规则的约束。在这个案例中,我们可能在服务器上定义了一个枚举类型,它在内部使用像是 4、5 和 6 这样的数字,但在 GraphQL 类型系统中将它们表示为枚举值。
126
125
127
126
## 列表解析器
128
127
@@ -140,13 +139,13 @@ Human: {
140
139
}
141
140
```
142
141
143
- 解析器在这个字段中不仅仅是返回了一个 Promise 对象,它返回一个 Promises ** 列表** 。 ` Human ` 对象具有他们正在驾驶的 ` Starships ` 的 ids 列表,但是我们需要通过这些 id 来获得真正的 Starship 对象。
142
+ 解析器在这个字段中不仅仅是返回了一个 Promise 对象,它返回一个 Promises ** 列表** 。` Human ` 对象具有他们正在驾驶的 ` Starships ` 的 ids 列表,但是我们需要通过这些 id 来获得真正的 Starship 对象。
144
143
145
144
GraphQL 将并发执行这些 Promise,当执行结束返回一个对象列表后,它将继续并发加载列表中每个对象的 ` name ` 字段。
146
145
147
146
## 产生结果
148
147
149
- 当每个字段被解析时,结果被放置到键值映射中,字段名称(或别名)作为键值映射的键,解析器的值作为键值映射的值,这个过程从查询字段的底部叶子节点开始返回,直到根 Query 类型的起始节点。总而言之, 最后合并成为能够镜像到原始查询结构的结果,然后可以将其发送(通常为 JSON 格式)到请求的客户端。
148
+ 当每个字段被解析时,结果被放置到键值映射中,字段名称(或别名)作为键值映射的键,解析器的值作为键值映射的值,这个过程从查询字段的底部叶子节点开始返回,直到根 Query 类型的起始节点。最后合并成为能够镜像到原始查询结构的结果,然后可以将其发送(通常为 JSON 格式)到请求的客户端。
150
149
151
150
让我们最后一眼看看原来的查询,看看这些解析函数如何产生一个结果:
152
151
0 commit comments