41

I started programming in React Native, and I got used to use the syntax:

async myFunction(){
    ...
    return await otherFunction();
}

But I don't know how to make it compatible with React JS and React Native in a shared package. How can I accomplish this so that it works in both platforms?

Thanks!

Julian
  • 33,915
  • 22
  • 119
  • 174
Santiago Bendavid
  • 961
  • 1
  • 9
  • 16
  • Did you look at AsyncStorage in react native official documents? (edit: just noticed this is asked months ago) – eden Mar 01 '17 at 12:41
  • @EnieJakiro I don't know how AsyncStorage is related to the question. I do use AsyncStorage but only for React Native. – Santiago Bendavid Mar 02 '17 at 14:50

3 Answers3

49

If you building using create-react-app it's been available since v0.2.3

https://github.com/facebookincubator/create-react-app/releases/tag/v0.2.3

It can be used inside a Component like this

class App extends Component {
  constructor(props) {
    super(props);
    this.state = { message: '' };
  }

  async componentDidMount() {
    this.setState({ message: 'loading...' });
    let d = await getData('/posts/1');
    this.setState({ message: d });
  }

  render() {
    let { message } = this.state;
    return (
      <div className="App">
        <p className="App-intro">
          { message }
        </p>
      </div>
    );
  }
}

See:

https://github.com/facebookincubator/create-react-app/issues/1024

Tim Arney
  • 1,776
  • 2
  • 18
  • 23
20

React Native ships with Babel and some Babel presets, whereas React on the web is just React related code.

If you want to use async/await on the web today you'll need Babel and the correct transforms: https://babeljs.io/docs/plugins/transform-async-to-generator/

or the stage-1 presets, which is fairly common in React apps today. http://babeljs.io/docs/plugins/preset-stage-1/

azium
  • 20,056
  • 7
  • 57
  • 79
3

Alternatively you can use Typescript.

Since version 2.1 it is possible to use async/await and directly transpile to ES5 (in other words have it run on ~all browsers)

Bruno Grieder
  • 28,128
  • 8
  • 69
  • 101