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()
Author by
user2520969
Updated on September 12, 2020Comments
-
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 almost 5 yearsI have been searching for a good explanation of Promise and finally found one! Thank you!
-
ceving over 3 yearsNone of the two alternatives actually waits. In particular
a
returned byawait
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 about 3 yearsoperation 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.