おーい磯野〜 callback使ってる関数をPromiseでラップしてasync/awaitで書こうぜ〜
例1
const sleep = (ms) => { return new Promise(resolve => setTimeout(resolve, ms)); } const something = async () => { await sleep(100) doSomething() }
例2
Geolocation.getCurrentPosition() - Web API インターフェイス | MDN から
// 元メソッドの構文は // navigator.geolocation.getCurrentPosition(success, error, options) // クラスの中 getCurrentPosition(options) { return new Promise((resolve, reject) => { navigator.geolocation.getCurrentPosition(resolve, reject, options) }) } async something() { try { let position = await this.getCurrentPosition() this.doSomething(position) } catch(error) { console.log(error) } }
例3
値を二つ返す系 例は React Nativeから Image コンポーネントのgetSizeメソッド
// 元メソッドの構文: getSize(uri: string, success: function, failure?: function) // クラスの中 _getSize(uri) { return new Promise((resolve, reject) => { Image.getSize(uri, (width, height) => { resolve({width, height}) }, reject) }) } async something(imageUri) { try { let { width, height } = await this._getSize(imageUri) this.doSomething(width, height) } catch(error) { console.log(error) } }