From f6e551c45b548d8c67693fe3c4d025a4d913eb18 Mon Sep 17 00:00:00 2001 From: Mike Piccolo Date: Fri, 14 Oct 2016 15:00:52 -0700 Subject: [PATCH] Example for using async/await (#11) * Use babelrc * Use async to unnest --- package.json | 2 +- src/actions/device.js | 25 +++++++++---------------- src/client/client.js | 32 +++++++++++--------------------- 3 files changed, 21 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index 1c967c4c3..8f6eb75f5 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "scripts": { "check": "node_modules/.bin/eslint --ext \".js\" --ignore-pattern node_modules --quiet .", "start": "node node_modules/react-native/local-cli/cli.js start", - "test": "mocha --compilers js:babel-register", + "test": "mocha --compilers js:babel-register --require babel-polyfill", "postinstall": "remotedev-debugger --hostname localhost --port 5678 --injectserver" } } diff --git a/src/actions/device.js b/src/actions/device.js index 2d0924f39..873b98a98 100644 --- a/src/actions/device.js +++ b/src/actions/device.js @@ -9,21 +9,14 @@ export const DEVICE_SUCCESS = 'DEVICE_SUCCESS'; export const DEVICE_FAILURE = 'DEVICE_FAILURE'; function fetchDevice() { - return (dispatch) => { - dispatch(requestData(DEVICE_REQUEST)); - - AsyncStorage.getItem('basic_info', (err, data) => { - if (err) { - dispatch(requestFailure(DEVICE_FAILURE, {msg: 'failed to load local storage'})); - } - - if (data && data.length > 0) { - const json = JSON.parse(data); - dispatch(requestSuccess(DEVICE_SUCCESS, json)); - } else { - dispatch(requestSuccess(DEVICE_SUCCESS, {hello: 'hello'})); - } - }); + return async (dispatch) => { + try { + dispatch(requestData(DEVICE_REQUEST)); + const json = await AsyncStorage.getItem('basic_info'); + dispatch(requestSuccess(DEVICE_SUCCESS, JSON.parse(json))); + } catch (err) { + dispatch(requestFailure(DEVICE_FAILURE, {msg: 'failed to load local storage'})); + } }; } @@ -31,4 +24,4 @@ export function loadDevice() { return (dispatch, getState) => { // eslint-disable-line no-unused-vars return dispatch(fetchDevice()); }; -} \ No newline at end of file +} diff --git a/src/client/client.js b/src/client/client.js index f89de7466..488e73bbb 100644 --- a/src/client/client.js +++ b/src/client/client.js @@ -240,29 +240,19 @@ export default class Client { ); } - doFetch = (url, options, onRequest, onSuccess, onFailure) => { + doFetch = async (url, options, onRequest, onSuccess, onFailure) => { if (onRequest) { onRequest(); } - - return fetch(url, this.getOptions(options)).then( - (response) => { - return response.json().then((data) => ({data, response})); - }).then(({data, response}) => { - if (!response.ok) { - return Promise.reject(data); - } - - return onSuccess(data, response); - }).catch((err) => { - // TODO errors that return non-json data get sent here - - if (this.logToConsole) { - console.log(err); // eslint-disable-line no-console - } - - onFailure(err); + try { + const response = await fetch(url, this.getOptions(options)); + const data = await response.json(); + return response.ok ? onSuccess(data, response) : Promise.reject(data); + } catch (err) { + if (this.logToConsole) { + console.log(err); // eslint-disable-line no-console } - ); + return onFailure(err); + } } -} \ No newline at end of file +}