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;
Share:
20,820
S.Testersen
Author by

S.Testersen

Updated on July 09, 2022

Comments

  • S.Testersen
    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.