Node wait for async function before continue

68,859

 Using callback mechanism:

function operation(callback) {

    var a = 0;
    var b = 1;
    a = a + b;
    a = 5;

    // may be a heavy db call or http request?
    // do not return any data, use callback mechanism
    callback(a)
}

operation(function(a /* a is passed using callback */) {
    console.log(a); // a is 5
})

 Using async await

async function operation() {
    return new Promise(function(resolve, reject) {
        var a = 0;
        var b = 1;
        a = a + b;
        a = 5;

        // may be a heavy db call or http request?
        resolve(a) // successfully fill promise
    })
}

async function app() {
    var a = await operation() // a is 5
}

app()
Share:
68,859
user2520969
Author by

user2520969

Updated on September 12, 2020

Comments

  • user2520969
    user2520969 over 3 years

    I have a node application that use some async functions.

    How can i do for waiting the asynchronous function to complete before proceeding with the rest of the application flow?

    Below there is a simple example.

    var a = 0;
    var b = 1;
    a = a + b;
    
    // this async function requires at least 30 sec
    myAsyncFunction({}, function(data, err) {
        a = 5;
    });
    
    // TODO wait for async function
    
    console.log(a); // it must be 5 and not 1
    return a;
    

    In the example, the element "a" to return must be 5 and not 1. It is equal to 1 if the application does not wait the async function.

    Thanks

  • Porco
    Porco almost 5 years
    I have been searching for a good explanation of Promise and finally found one! Thank you!
  • ceving
    ceving over 3 years
    None of the two alternatives actually waits. In particular a returned by await is not 5. Instead it is a promise, which is just another way to require a callback. The right answer would be: you can not wait.
  • Logan Cundiff
    Logan Cundiff about 3 years
    operation function doesn't need to have async before it, since its not using await. Its redundant since async makes it so that the function returns a promise, but operation() already is returning a promise.