Nodejs async / await with delay
20,820
Solution 1
Use Promise
for this if you really want to send response after 1000 otherwise there is no need for doing this.
var request = require('request-promise');
class Test{
constructor(){
}
async Start(){
var response = await this.getResponse();
await console.log(response);
}
async getResponse(){
var options = {
uri: "https://www.google.com"
}
var response = await request(options);
return new Promise((resolve) => {
setTimeout(() => resolve(response), 1000)
})
}
}
module.exports = Test;
Solution 2
You can't put "return" inside of another function and expect it to return to the outside function. (Biggest problem)
async getResponse(){
setTimeout(function(){
return "Test";
},1000);
return undefined; // line is basically what is here when you don't return anything
}
await getReponse(); // returns undefined, NOT "Test".
You could write the code like this instead:
const delay = time => new Promise(res=>setTimeout(res,time));
class Test{
constructor(){
}
async Start(){
var response = await this.getResponse();
console.log(response); // await not needed here.
}
async getResponse(){
var options = {
uri: "https://www.google.com"
}
var response = await request(options);
await delay(1000); // since we're using async functions, we can "await" a promise
return response;
// previous code would return "undefined" when after it called setTimeout
}
}
module.exports = Test;
Author by
S.Testersen
Updated on July 09, 2022Comments
-
S.Testersen almost 2 years
I have a problem with this code:
var request = require('request-promise'); class Test{ constructor(){ } async Start(){ var response = await this.getResponse(); await console.log(response); } async getResponse(){ var options = { uri: "https://www.google.com" } var response = await request(options); setTimeout(function(){ return response; },1000); } } module.exports = Test;
When I run the Start(), the console logs "undefined", but why is this? I know that I set a 1 second delay on the return, but shouldn't the code wait until the return? because of the await?
P.S: The delay is to simulate the response data being processed.