-
Notifications
You must be signed in to change notification settings - Fork 848
Open
Description
When using an extension with a schema which has a resolver that returns a function value, e.g.
func(p graphql.ResolveParams) (interface{}, error) {
return func() (interface{}, error) {
return "hello", nil
}, nil
}the ResolveFieldFinishFunc (as registered by the ResolveFieldDidStart method on the extension) is called before the function value is executed. If I'm reading the source correctly below for resolveField, resolveFieldFinishFn is called immediately after the resolveFn, but before completeValueCatchingError actually evaluates the resolver value if it is a function.
Lines 657 to 663 in bed865f
| extErrs = resolveFieldFinishFn(result, resolveFnError) | |
| if len(extErrs) != 0 { | |
| eCtx.Errors = append(eCtx.Errors, extErrs...) | |
| } | |
| completed := completeValueCatchingError(eCtx, returnType, fieldASTs, info, path, result) | |
| return completed, resultState |
Is there a reason for this? Since the Extension interface was created in part to support tracing use cases as per #448, that we would want to only run the ResolveFieldFinishFunc after the resolver value is fully evaluated.
Metadata
Metadata
Assignees
Labels
No labels