@@ -120,15 +120,22 @@ class DataLoader<K, V, C = K> {
120120 *
121121 * var [ a, b ] = await myLoader.loadMany([ 'a', 'b' ]);
122122 *
123- * This is equivalent to the more verbose:
123+ * This is similar to the more verbose:
124124 *
125125 * var [ a, b ] = await Promise.all([
126126 * myLoader.load('a'),
127127 * myLoader.load('b')
128128 * ]);
129129 *
130+ * However it is different in the case where any load fails. Where
131+ * Promise.all() would reject, loadMany() always resolves, however each result
132+ * is either a value or an Error instance.
133+ *
134+ * var [ a, b, c ] = await myLoader.loadMany([ 'a', 'b', 'badkey' ]);
135+ * // c instanceof Error
136+ *
130137 */
131- loadMany ( keys : $ReadOnlyArray < K > ) : Promise < Array < V >> {
138+ loadMany ( keys : $ReadOnlyArray < K > ) : Promise < Array < V | Error >> {
132139 if ( ! isArrayLike ( keys ) ) {
133140 throw new TypeError (
134141 'The loader.loadMany() function must be called with Array<key> ' +
@@ -138,7 +145,7 @@ class DataLoader<K, V, C = K> {
138145 // Support ArrayLike by using only minimal property access
139146 const loadPromises = [ ] ;
140147 for ( let i = 0 ; i < keys . length ; i ++ ) {
141- loadPromises . push ( this . load ( keys [ i ] ) ) ;
148+ loadPromises . push ( this . load ( keys [ i ] ) . catch ( error => error ) ) ;
142149 }
143150 return Promise . all ( loadPromises ) ;
144151 }
0 commit comments