@@ -16,10 +16,10 @@ type BatchLoadFn<K, V> = (keys: Array<K>) => Promise<Array<V | Error>>;
1616// custom cache instance.
1717type Options < K , V > = {
1818 batch ?: boolean ;
19+ maxBatchSize ? : number ;
1920 cache ? : boolean ;
2021 cacheKeyFn ?: ( key : any ) => any ;
2122 cacheMap ?: CacheMap < K , Promise < V >> ;
22- maxBatchSize ? : number ;
2323} ;
2424
2525// If a custom cache is provided, it must be of this type (a subset of ES6 Map).
@@ -222,14 +222,25 @@ function dispatchQueue<K, V>(loader: DataLoader<K, V>) {
222222 var queue = loader . _queue ;
223223 loader . _queue = [ ] ;
224224
225- var maxBatchSize = loader . _options && loader . _options . maxBatchSize ||
226- queue . length ;
227- for ( var i = 0 ; i < queue . length / maxBatchSize ; i ++ ) {
228- loadKeys ( loader , queue . slice ( i * maxBatchSize , ( i + 1 ) * maxBatchSize ) ) ;
225+ // If a maxBatchSize was provided and the queue is longer, then segment the
226+ // queue into multiple batches, otherwise treat the queue as a single batch.
227+ var maxBatchSize = loader . _options && loader . _options . maxBatchSize ;
228+ if ( maxBatchSize && maxBatchSize > 0 && maxBatchSize < queue . length ) {
229+ for ( var i = 0 ; i < queue . length / maxBatchSize ; i ++ ) {
230+ dispatchQueueBatch (
231+ loader ,
232+ queue . slice ( i * maxBatchSize , ( i + 1 ) * maxBatchSize )
233+ ) ;
234+ }
235+ } else {
236+ dispatchQueueBatch ( loader , queue ) ;
229237 }
230238}
231239
232- function loadKeys < K , V > ( loader : DataLoader < K , V > , queue : LoaderQueue < K , V > ) {
240+ function dispatchQueueBatch < K , V > (
241+ loader : DataLoader < K , V > ,
242+ queue : LoaderQueue < K , V >
243+ ) {
233244 // Collect all keys to be loaded in this dispatch
234245 var keys = queue . map ( ( { key } ) => key ) ;
235246
0 commit comments