@@ -120,15 +120,22 @@ class DataLoader<K, V, C = K> {
120
120
*
121
121
* var [ a, b ] = await myLoader.loadMany([ 'a', 'b' ]);
122
122
*
123
- * This is equivalent to the more verbose:
123
+ * This is similar to the more verbose:
124
124
*
125
125
* var [ a, b ] = await Promise.all([
126
126
* myLoader.load('a'),
127
127
* myLoader.load('b')
128
128
* ]);
129
129
*
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
+ *
130
137
*/
131
- loadMany ( keys : $ReadOnlyArray < K > ) : Promise < Array < V >> {
138
+ loadMany ( keys : $ReadOnlyArray < K > ) : Promise < Array < V | Error >> {
132
139
if ( ! isArrayLike ( keys ) ) {
133
140
throw new TypeError (
134
141
'The loader.loadMany() function must be called with Array<key> ' +
@@ -138,7 +145,7 @@ class DataLoader<K, V, C = K> {
138
145
// Support ArrayLike by using only minimal property access
139
146
const loadPromises = [ ] ;
140
147
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 ) ) ;
142
149
}
143
150
return Promise . all ( loadPromises ) ;
144
151
}
0 commit comments