WebBluetoothでは基本的にはPromiseを利用する必要がありますが、Async/Awaitが利用できるようになりました。
これにより可読性の高いコードが書けるようになります。
例えば、バッテリー残量を参照するコードで比較してみます。
Promise ver.
function onButtonClick() { log('Requesting Bluetooth Device...'); navigator.bluetooth.requestDevice( {filters: [{services: ['battery_service']}]}) .then(device => { log('Connecting to GATT Server...'); return device.gatt.connect(); }) .then(server => { log('Getting Battery Service...'); return server.getPrimaryService('battery_service'); }) .then(service => { log('Getting Battery Level Characteristic...'); return service.getCharacteristic('battery_level'); }) .then(characteristic => { log('Reading Battery Level...'); return characteristic.readValue(); }) .then(value => { let batteryLevel = value.getUint8(0); log('> Battery Level is ' + batteryLevel + '%'); }) .catch(error => { log('Argh! ' + error); }); }
こちらは Async/Await ver.
async function onButtonClick() { try { log('Requesting Bluetooth Device...'); const device = await navigator.bluetooth.requestDevice({ filters: [{services: ['battery_service']}]}); log('Connecting to GATT Server...'); const server = await device.gatt.connect(); log('Getting Battery Service...'); const service = await server.getPrimaryService('battery_service'); log('Getting Battery Level Characteristic...'); const characteristic = await service.getCharacteristic('battery_level'); log('Reading Battery Level...'); const value = await characteristic.readValue(); log('> Battery Level is ' + value.getUint8(0) + '%'); } catch(error) { log('Argh! ' + error); } }
then()を都度都度で書かなくて済むのでスッキリしますね。
Bluetooth Low Energy: The Developer's Handbook
- 作者: Robin Heydon
- 出版社/メーカー: Prentice Hall
- 発売日: 2012/10/10
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: 堤修一,松村礼央
- 出版社/メーカー: ソシム
- 発売日: 2015/03/23
- メディア: 単行本
- この商品を含むブログを見る
Bluetooth Low Energyをはじめよう (Make:PROJECTS)
- 作者: Kevin Townsend,Carles Cufi,Akiba,Robert Davidson,水原文
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/02/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る