Use 'await' without an 'async' function

async/await functions was released in ES7 as a wrapper for Promises and the await keyword was not used without a wrappingasync function. Using await without an async will give an error.

// SyntaxError: await is only valid in async function

There is a proposal to use await without an async function but Node.js 14.3.0 and Google Chrome has already implemented this feature.

We will see how you can use an await without a wrapping async function in Node.js.

First, you'll need to update your node version if your version is below 14.3.0. You can use nvm to update or get the latest version at the official downloads page.

# Using `nvm`
nvm install 14.3.0

Now that we have Node updated, we can use await on it's own. Create a new directory and run

npm init -y

Then in the generated package.json file, add "type": "module". We will be using ES Modules. Create a new file in the same directory as your package.json, index.js. We are done with the setup. In your terminal, install axios using npm.

# Installing `axios`
npm install axios

When the installation is done, you can head over to your index.js file and write some code. We are going to make a simple GET request to an API endpoint and log the response to the terminal but we will be using await without an async wrapper function.

// Because we are using ES Modules
import axios from 'axios';

// Making `GET` request with `axios`
const response = await axios.get("https://rickandmortyapi.com/api/character/");

// Log the data 
console.log(response.data);

We can run the file and see the results.

// Any of the commands below will work.
node --harmony-top-level-await index.js 
node index.js  // Works without the flag now

// {
//   info: {
//     count: 671,
//     pages: 34,
//     next: 'https://rickandmortyapi.com/api/character/?page=2',
//     prev: null,
//   },
//   results: [
//     // ...
//   ],
// };

That's how you can use await without an async. For more information, check out this blog.