diff --git a/dataloader/dataloader.go b/dataloader/dataloader.go index 98494ae..fea8cf4 100644 --- a/dataloader/dataloader.go +++ b/dataloader/dataloader.go @@ -28,6 +28,7 @@ type DataLoaders interface { // DataLoader interface type DataLoader interface { Load(context.Context, interface{}) (interface{}, error) + LoadOne(context.Context, interface{}) (interface{}, error) LoadMany(context.Context, []interface{}) ([]interface{}, []error) Clear(interface{}) ClearAll() diff --git a/dataloader/loader.go b/dataloader/loader.go index cbf87b5..9d926db 100644 --- a/dataloader/loader.go +++ b/dataloader/loader.go @@ -150,6 +150,13 @@ func (l *Loader) Load(ctx context.Context, key interface{}) (interface{}, error) return thunk() } +// LoadOne loads the given key, doing one request instead of batch, and returns a thunk that resolves the key. +func (l *Loader) LoadOne(ctx context.Context, key interface{}) (interface{}, error) { + // set batch capacity to 1 + l.batchCap = 1 + return l.Load(ctx, key) +} + // LoadMany loads mulitiple keys, returning a thunk (type: ThunkMany) that will resolve the keys passed in. func (l *Loader) LoadMany(ctx context.Context, keys []interface{}) ([]interface{}, []error) { length := len(keys) diff --git a/router/context.go b/router/context.go index 420b1f8..a8b2a4c 100644 --- a/router/context.go +++ b/router/context.go @@ -123,6 +123,7 @@ type GQLSubscriptionAdaptor interface { // DataLoaderAdaptor interface type DataLoaderAdaptor interface { Load(context.Context, interface{}) (interface{}, error) + LoadOne(context.Context, interface{}) (interface{}, error) LoadMany(context.Context, []interface{}) ([]interface{}, []error) Clear(interface{}) ClearAll()