4

the Javascript FileReader object supports an onerror handler that gets called when there has been an error, but the event passed in is a ProgressEvent and doesn't contain any details of the error.

How can I find out what actual error occurred?

Andy
  • 10,412
  • 13
  • 70
  • 95

1 Answers1

4

After RTFMing a little more closely in response to @Ariel's comment (https://developer.mozilla.org/en-US/docs/Web/API/FileReader/error), I see that FileReader has an error property as well as an error event. When the error handler is called, the the ProgressEvent passed to it is next to useless and you need to look at the error property instead.

Therefore instead of:

reader.onerror = x => { throw x }

a more appropriate response is:

reader.onerror = () => { throw reader.error }`

or if you're wrapping inside a promise (as per Javascript Promises with FileReader()), instead of:

reader.onerror = reject:

you're better off using

reader.onerror = () => reject(reader.error)

Having said that, the error property is of type DOMException which does not inherit from Error and, in my case, contained very little useful information, but it seems to be the best there is and, as far as I could tell, throwing a DOMException seems to be considered acceptable practice even though it isn't an Error

Andy
  • 10,412
  • 13
  • 70
  • 95
  • 1
    Note that nowadays you should use the Blob's reading method instead of a FileReader. These (apart from .stream()) will return a Promise that rejects with the appropriate DOMException directly. – Kaiido Apr 15 '22 at 08:36