Re: Alternative File API

On Tue, Aug 11, 2009 at 7:20 PM, Jonas Sicking<jonas@sicking.cc> wrote:
> Here is an alternative proposal for an API for reading files:
>

[snip proposal]

>
> As stated, I'm not convinced that this is a better solution than what
> the spec currently does. The only advantage I can see is that it
> supports progress events without requiring the use of XMLHttpRequest,
> and the downside is that it's a significantly bigger API. Usage
> examples would be:
>

The advantage to having the callback as an event is that it lets
multiple callbacks be attached easily to the read.

The File can be found in the DOM as:-

var files = input.files,
    file =  files && files[0];

That file might be gotten from two separate unrelated parts of the
code. Each could a callback to that file and issue different getXXX
commands to it, creating a race condition whereby one callback could
get called where it was expecting the payload to have text and another
callback to get called where it was expecting a payload of binary
text.

Instead, a separate reader can be obtained to read the file and that
reader can have the callback.

> Current draft:
> myFile.getAsBinaryString(handler);
> function handler(data, error) {
>  doStuffWith(data);
> }
>
> Above API:

// Is it "FileRequest" or "FileReader"?
> reader = new FileReader;

// The following two statements are backwards.
> reader.readAsBinaryString(myFile);
> reader.onload = handler;
> function handler(event) {
>  doStuffWith(event.target.response);
> }
>

What happens when the reader is in process of reading?
var reader = new FileReader;
reader.onload = handler;
reader.readAsBinaryString(myFile);
reader.readAsText(myFile);

The callback would have to know in advance what type of read happened.
So you'd want to have a different reader for each type of read. For
example:-

var bReader = new FileReader;
bReader.onload = handler;
bReader.readAsBinaryString(myFile);
var tReader = new FileReader;
tReader.readAsText(myFile);

As you can see, the read /type/ is exclusive to the reader. "tReader"
is only reading "text" and "bReader" is only reading binary. Each
reader reads only one type. So doesn't a Factory seem more appropriate
than a bunch of constructors?

var bReader = FileReader.create(FileReader.BINARY); // (the "etc" part).
bReader.onload = handler;
bReader.read(myFile);

> / Jonas

Garrett

Received on Saturday, 15 August 2009 16:20:28 UTC