- From: Mounir Lamouri <mounir@lamouri.fr>
- Date: Mon, 08 Sep 2014 19:40:26 +1000
- To: Rick Waldron <waldron.rick@gmail.com>, Tim Volodine <timvolodine@google.com>
- Cc: Tobie Langel <tobie.langel@gmail.com>, Marcos Caceres <marcos@marcosc.com>, Jonas Sicking <jonas@sicking.cc>, public-device-apis@w3.org, Anssi Kostiainen <anssi.kostiainen@intel.com>, "public-script-coord" <public-script-coord@w3.org>, Doug Turner <dougt@mozilla.com>, Domenic Denicola <domenic@domenicdenicola.com>, Anne van Kesteren <annevk@annevk.nl>
On Sat, 6 Sep 2014, at 00:59, Rick Waldron wrote: > On Fri, Sep 5, 2014 at 10:18 AM, Tim Volodine <timvolodine@google.com> > wrote: > > > "new Sensor.." does not sound natural in the context of sensors. There is > > only one sensor per browser so it doesn't seem great to have multiple > > objects for the same sensor. > > > > This is an assumption that will lead to problems in the future: devices > are > already shipping with more than one of certain sensors, eg. proximity > sensor. Also, 1st and 3rd party code must be allowed to create their own > references of sensor objects with specified reading frequencies—those > instances might be deriving their values from the same hardware source, > but > the frequency of value delivery must be allowed to be application-domain > specific. Tim's proposal as much as yours can take that into account, it only require to use a Dictionary in Tim's proposal and have frequency as one known property. It would then be extensible. > Replace "register once" with "initialize an instance" and you have the > Sensor design: > > // use default frequency, whatever that might be > var light = new Sensor.AmbientLight(); > > - or - > > // Specify a reading frequency in hz: > var light = new Sensor.AmbientLight({ > frequency: 100 > }); > > // ... > > // synchronous access to the value, but this is null right now > // because the platform hasn't delivered a value yet... > light.value; I think the main difference between the two approaches is here: you create the sensor object synchronously then set the value asynchronously while Tim creates the object asynchronously, thus never expose an undefined value. I think Tim's approach is better because having undefined value would be fairly hard to handle for the developer. An alternative would be to not expose a synchronous getter but instead do something like: ``` var sensor = new Sensor({ [...] }); sensor.getValue().then(function(value) { [...] }); ``` but that comes with the downside of requiring developers to keep track of the current value themselves if they want to have a synchronous access to it. -- Mounir
Received on Monday, 8 September 2014 09:40:51 UTC