40

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

3
  • 4
    Great and useful comment Commented Nov 7, 2017 at 13:22
  • 3
    Yes, promises and async/await syntax sugar - as you suggested in the tags - are the way to go. Have you tried applying them to your problem? Please show your efforts. Commented Nov 7, 2017 at 13:29
  • Possible duplicate of How to return the response from an asynchronous call? Commented Nov 7, 2017 at 19:37

1 Answer 1

65

 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() 
Sign up to request clarification or add additional context in comments.

3 Comments

I have been searching for a good explanation of Promise and finally found one! Thank you!
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.
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.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.