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.
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;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With