DEV Community

loading...

Async functions always return a promise - Lets deep into the Async world

Paramanantham Harrison
Originally published at learnwithparam.com on ・2 min read

I have my new FREE workshop on API design for beginners using Node Js and MongoDB. It is my first workshop, let's learn together. You can register for the workshop here

Async functions are a way to make the asynchronous operation synchronously by waiting for the response. Let's see it in the example straight away,

// Normal async function - Returning promise
const getCats = async () => {
  return new Promise((resolve, reject) =>
    setTimeout(
      () =>
        resolve([
          {
            name: 'tiger',
          },
          {
            name: 'jimmy',
          },
        ]),
      2000
    )
  );
};

// Self envoking async function
(async () => {
  console.log(getCats()); // Promise { <pending> }
  const cats = await getCats();
  console.log(cats); // [{ name: 'tiger' }, { name: 'jimmy' }]
})();

As you can see, we are returning a promise in our example.

Now lets see the next example by returning direct JSON array,

// async function - Returning JSON
const getCatsJson = async () => {
  return [
    {
      name: 'tiger',
    },
    {
      name: 'jimmy',
    },
  ];
};

// Self envoking async function
(async () => {
  console.log(getCatsJson()); // Promise { [{ name: 'tiger' }, { name: 'jimmy' }] }
  const catsJson = await getCatsJson();
  console.log(catsJson); // [{ name: 'tiger' }, { name: 'jimmy' }]
})();

As you can check the console log, even though we returned a JSON object from the async function. It was wrapped as a promise. So we still need to await and resolve the promise.

You can always resolve the async without await using promise way,

getCatsJson().then(console.log); // [{ name: 'tiger' }, { name: 'jimmy' }]

You can check the examples here,

Hope, this helps you to understand how async returns the value by wrapping it as a Promise 😋

Follow me on twitter. I share my reading list and short tips on twitter

Discussion (0)