W3C home > Mailing lists > Public > public-device-apis@w3.org > July 2014

Re: [battery] Should getBattery() always return the same promise?

From: Mounir Lamouri <mounir@lamouri.fr>
Date: Wed, 02 Jul 2014 07:20:14 +1000
Message-Id: <1404249614.6439.136713197.643FB9DA@webmail.messagingengine.com>
To: public-device-apis@w3.org
See
http://lists.w3.org/Archives/Public/public-device-apis/2014Apr/0037.html

There was a CfC about that too.

-- Mounir

On Wed, 2 Jul 2014, at 07:15, Rick Waldron wrote:
> On Tue, Jul 1, 2014 at 6:03 AM, Mounir Lamouri <mounir@lamouri.fr> wrote:
> 
> > Hi,
> >
> > When I wrote the getBattery() prose, I made it so that getBattery()
> > would return a new promise every time it is called but it would always
> > return the same BatteryManager when the promise is resolved.
> >
> > I realised that this requirement probably doesn't make much sense and we
> > might want to spec getBattery() as returning always the same promise. In
> > other words, navigator.getBattery() === navigator.getBattery(). The
> > intent isn't really to get the equality but that way, we simplify the
> > implementation because implementing this only require to keep track of
> > that one promise.
> >
> 
> 
> Is there a design history document or thread that explains the reasoning
> that lead to an API that returns a promise here? The battery exists
> before
> the browser ever loads a site and its JavaScript files, so why does
> `getBattery` need to be a promise? The "latest published" Battery Status
> API spec makes more sense: navigator.battery is always a single instance
> of
> BatteryManager that exists as specified here:
> http://www.w3.org/TR/battery-status/#navigatorbattery-interface . Why
> does
> it need to be "requested" via a "getBattery" API that itself doesn't
> return
> a BatteryManager object, but promises to produce one (and always the same
> one)?
> 
> If it's always the same BatteryManager instance, it's not clear how this
> API usage:
> 
> navigator.getBattery().then(function(battery) {
>   battery.onlevelchange = function() {
>     console.log("level changed!");
>   };
> });
> 
> 
> ... is at all superior to this:
> 
> navigator.battery.onlevelchange = function() {
>     console.log("level changed!");
> });
> 
> 
> Even if the argument is that not all code needs or wants to allocate the
> BatteryManager, then the solution is simply to make `navigator.battery`
> an
> accessor to the BatteryManager instance.
> 
> 
> Rick
Received on Tuesday, 1 July 2014 21:20:39 UTC

This archive was generated by hypermail 2.3.1 : Monday, 23 October 2017 14:54:03 UTC