Skip to content

[REQUEST] support vercel edge functions by default #341

@sgrund14

Description

@sgrund14

What problem are you trying to solve?

support the vercel edge runtime for dataloaders without workaround. see discussion here vercel/next.js#44711 (edge does not support process.nextTick, which is being checked in the Dataloader package)

right now, you have to pass in the batchScheduleFn with a setTimeout to the DataLoader to make the package work on the edge runtime like so

 batchScheduleFn: (cb) => setTimeout(cb, 0),

but this might not be ideal? not totally sure what happens in this case, I would just worry about adding latency or breaking the batching with the setTimeout instead of relying on the default behavior (batching per execution context)

Describe the solution you'd like

Dataloader should work in the edge runtime without having to pass in a setTimeout

Describe alternatives you've considered

using the setTimeout workaround

Additional context

nice to support edge functions so that you can have zero cold start graphql functions in a serverless environment

Activity

changed the title [-][support vercel edge functions by default][/-] [+][REQUEST] support vercel edge functions by default[/+] on Jun 2, 2023
ardatan

ardatan commented on Jun 2, 2023

@ardatan
Member

Dataloader doesn't use process.nextTick already if not available;

typeof process === 'object' && typeof process.nextTick === 'function'

I think Next.js checks the code and throws an error even if it is not called. I think it needs to be fixed on Next.js side.

sgrund14

sgrund14 commented on Jun 2, 2023

@sgrund14
Author

hm, not possible to fix here? I only ask because while you have responded right away (thanks!), the vercel team hasn't taken a look at that issue for 5 months :(

wonder how they are actually determining that the code is getting run when it's not 🤔 like why does it work when the batchScheduleFn is passed in?

ardatan

ardatan commented on Jun 2, 2023

@ardatan
Member

Hmm you are right. I missed that. Maybe they throw this error when you try to acces the global "process" variable.

sgrund14

sgrund14 commented on Jun 6, 2023

@sgrund14
Author

yea, seems like that could be the case. how to avoid even accessing the process variable tho... would dataloader have to somehow check what environment it's in? or do a typeof process !== 'undefined' check?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @sgrund14@ardatan

        Issue actions

          [REQUEST] support vercel edge functions by default · Issue #341 · graphql/dataloader