- From: Brendan Eich <brendan@secure.meer.net>
- Date: Tue, 27 Aug 2013 13:46:57 -0700
- To: Joshua Bell <jsbell@google.com>
- CC: public-script-coord <public-script-coord@w3.org>
Joshua Bell wrote:
> We're considering extending an existing method on a browser object
> with a second, optional parameter. The API under consideration is the
> "continue" method on the IDBCursor in the Indexed DB API, but I'm
> interested in general thoughts.
>
> Existing code, or that didn't need the new capabilities would use:
>
> myCursor.continue("my key");
>
> New code that needed the extra capabilities could use:
>
> myCursor.continue("my key", {primaryKey: "my primary key"});
>
> Now the problem: the new call would fail silently on older
> implementations; it would yield a value that would be incorrect, but
> not in a way that's trivial to detect.
That says this is a backward-incompatible extension.
> How should the API be designed to allow feature detection, without
> "designing for the past" ?
>
> Various solutions:
>
> * Use a new method, e.g. continueWithPrimaryKey(), and detect with
> ('continueWithPrimaryKey' in IDBCursor)
This works best. Is a polyfill possible?
> * Rely on a library like Modernizr to implement a test - in this case,
> by creating a scratch database, populating it with data, and probing
> the behavior; doable, but with a minimum of 3 turns of the event loop
> (open database, populate+open cursor, call continue, check result)
Lost me after "Rely on" ;-).
> * Change the method signature in such a way that it would throw an
> exception in older implementations, e.g. continue({key: ...,
> primaryKey: ...}).
>
> Note that the last approach works this time we upgrade the API because
> passing an object happens to throw with the existing API, but that
> approach would fail next time we upgrade the API to take yet another
> optional param.
Seems bogus to switch from n-ary when n goes past 1 back to 1-ary with
parameters passed in an object.
New method wins cleanly in my view, with zero doubt if polyfills are
doable (they do not have to be "perfect").
/be
Received on Tuesday, 27 August 2013 20:47:16 UTC