Async, Await & Promise

Async, Await and Promise in NODEJS examples

await is used to wait for a Promise. It can be used only inside an async function.

async function func_nm(){
    return_value = await <expression>
    }

return_value is the value fulfilled by Promise.

expression is a Promise or any other value to wait for.

await pauses the async function execution, until a Promise is resolved or rejected.

Example 1:-

function resolvePromise() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('resolved after await');
    }, 3000);
  });
}

async function func() {
  console.log(Date.now());
  var ret_val = await resolvePromise();
  console.log(Date.now());
  console.log(ret_val);
}

func();

Example 2:-

const request = require('request');

function resolvePromise() {
  return new Promise((resolve,reject) => {
        request('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }, (err, res, body) => {
        if (err) { reject(err) }
          resolve(body);
    });
    });
  }

async function waitPromise(){
    var ret_val = await resolvePromise();
    console.log(ret_val);
}

waitPromise();

Difference between callback based function and promise based function

  • A callback based function may return undefined value.
  • If a callback based function is converted to a promise based function, it will, for sure return some value (resolved promise).
  • Below example is to convert a callback based function to promise

callback example (it returns undefined, as return is executed even before callback completion)

const request = require('request');


function withoutPromise() {
        request('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }, (err, res, body) => {
        if (err) { reject(err) }
                return(body);
    });
  }

async function waitReturn(){
    var ret_val = await withoutPromise();
    console.log(ret_val);
}

waitReturn();

conversion to promise example (it returns promised value)

const request = require('request');

function withPromise() {
  return new Promise((resolve,reject) => {
        request('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }, (err, res, body) => {
        if (err) { reject(err) }
          resolve(body);
    });
    });
  }

async function waitReturn(){
    var ret_val = await withPromise();
    console.log(ret_val);
}

waitReturn();