@@ -8,20 +8,36 @@ export const fileHandler = {
88 if ( value === null || value === undefined ) return value ;
99 if ( value . constructor && value . constructor === File ) {
1010 const { name, lastModified, size, type } = value ;
11- const arrayBuffer = await new Promise ( ( resolve ) => {
12- const reader = new FileReader ( ) ;
13- reader . addEventListener ( "loadend" , ( ) => {
14- resolve ( reader . result ) ;
11+
12+ // Will be null in the event of an error on read, DataView otherwise
13+ let content = null ;
14+ // Will be an error string if content failed to read, null otherwise
15+ let error = null ;
16+
17+ try {
18+ const arrayBuffer = await new Promise ( ( resolve , reject ) => {
19+ const reader = new FileReader ( ) ;
20+ reader . addEventListener ( "loadend" , ( ) => {
21+ resolve ( reader . result ) ;
22+ } ) ;
23+ reader . addEventListener ( "error" , ( ) => {
24+ reject ( reader . error ) ;
25+ } ) ;
26+ reader . readAsArrayBuffer ( value ) ;
1527 } ) ;
16- reader . readAsArrayBuffer ( value ) ;
17- } ) ;
18- const content = new DataView ( arrayBuffer ) ;
28+
29+ content = new DataView ( arrayBuffer ) ;
30+ } catch ( e ) {
31+ error = e ?. message ?? String ( e ) ;
32+ }
33+
1934 return {
2035 name,
2136 lastModified,
2237 size,
2338 type,
2439 content,
40+ error,
2541 // used by server to prevent sending those fields back to JS
2642 _filter : [ "content" ] ,
2743 } ;
@@ -38,13 +54,10 @@ export const fileListHandler = {
3854 return value ;
3955 }
4056 if ( ( value . constructor && value . constructor === FileList ) || value . length ) {
41- const results = [ ] ;
42- /* eslint-disable no-await-in-loop */
43- for ( let i = 0 ; i < value . length ; i ++ ) {
44- results . push ( await fileHandler . decorate ( value [ i ] ) ) ;
45- }
46- /* eslint-enable no-await-in-loop */
47- return results ;
57+ const results = await Promise . allSettled (
58+ Array . from ( value ) . map ( ( file ) => fileHandler . decorate ( file ) ) ,
59+ ) ;
60+ return results . map ( ( result ) => result . value ) ;
4861 }
4962 return value ;
5063 } ,
0 commit comments