After a parsed document is validated, execution begins at the top-level Query, Mutation, or Subscription fields, and each field on each type is backed by a resolver function written by the server developer. In the reference implementation a resolver receives four arguments: obj (the previous object), args (the field's arguments), context (a value shared with every resolver, holding things like the logged-in user or database access), and info (field and schema details for advanced use). While a query could technically write data, mutation operations are conventionally used for side effects, and implementations are expected to execute mutation fields serially. Resolvers may be asynchronous — returning Promises, Futures, or Tasks — and GraphQL waits for them with optimal concurrency; a resolver can even return a list of Promises, each of which resolves concurrently before sub-fields continue. Many libraries let you omit trivial resolvers that just read a same-named property, and scalar coercion converts resolver output, such as internally numeric Enum values, into what the schema expects. Resolved values are collected bottom-up into a structure that mirrors the query and is sent to the client, typically as JSON. Scope: GraphQL. Reviewed October 4, 2026.
Execution and resolver functions
Document v1 · published by Koskamo editorial · updated 2026-10-04
Source and provenance
- Original source
- graphql.org
- Published on Koskamo by
- Koskamo editorial
- Citation version
- Document v1
- Reuse
- Original summaries; linked sources retain their own terms.