Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a new internal method that is used by
Promise#then
to create a new Promise. This method can be overriden byPromise
subclasses to have finer grained control about the promise type returned by chaining.The main target for this method are libraries like
graphql-batch
, which come with their ownPromise
sub-class with a customdefer
method. In the case ofgraphql-batch
,defer
is overriden to set the current executor'sloading
attribute to false (viaexecutor.defer
). Unfortunately, this means thatexecutor.defer
is called for each chained promise as well.In the following snippet, there's a total of 4 calls to
executor.defer
:By implementing a custom
GraphQL::Batch::Promise#spawn
that returnsPromise
instances instead ofGraphQL::Batch::Promise
instances, we can get the calls toexecutor.defer
down to 1, just for the first promise in the chain: