setTimeout not working with node.js

14,512

Your call back is executing immediately because you're calling it then and there.

Change it to this.setTimeout(function() { getPC(lapetus,pc_id); }, 18000000); so that what you want to execute is in a function for setTimeout to call.

** Edit **

In relation to my last comment. You should move your "ok..." inside of the function you've put inside of setTimeout. This will cause the "ok..." to execute right before getPC is called.

this.setTimeout(function() {
    console.log('ok... ' + new Date);
    getPC(lapetus,pc_id)
}, 18000000);

It is important to understand that setTimeout will only start a timer which will execute your code later. setTimeout is going to start that timer, and not wait for it to finish. It will move to the next bit of code once it is done starting that timer.

Share:
14,512

Related videos on Youtube

user3773712
Author by

user3773712

Updated on October 06, 2022

Comments

  • user3773712
    user3773712 over 1 year

    I am writing mocha test cases to test the following steps. I intend to make an API call and wait for 30 minutes before calling another API. I am using an internal node API which was written to call REST APIs to write this test case. But for some reason, setTimeout is not waiting for the given ms. Can someone please help me?

     describe('Checkout - ', function() {
       before(function() {
         lapetus = test.Lapetus;
       });
      it('Get purchase contract after session is expired [C123]',     function(done) {
        this.timeout(180000000);
        lapetus.run(function() {
         // create customer
         ......
    
         // create new cart and add one item
         ......
    
        // create new contract with empty cart id
        .......
        var pc_id =....;
    
        // wait for 30 minutes for the session to expire
        console.log('wait... ' + new Date);
        this.setTimeout(getPC(lapetus,pc_id), 18000000);
        console.log('ok... ' + new Date);
        done();
      });
    });
    
      var getPC = function(lapetus, pc_id){
       // get newly created purchase contract and verify session expired message throws
        .....
        ......
     };
      });
    

    It does not wait 30 minutes. The call back I put in (the getPC method) executes immediately.

    Any help is appreciated.

    Thanks

  • user3773712
    user3773712 about 9 years
    Hi Chris,Thanks but I just changed the timeout call to this.setTimeout(function() {getPC(lapetus,pc_id);}, 18000000);..Even then i see that the calls are happening without any wait :(
  • user3773712
    user3773712 about 9 years
    Here is my output: wait... Thu Apr 23 2015 13:11:04 GMT-0700 (PDT) ok... Thu Apr 23 2015 13:11:04 GMT-0700 (PDT)
  • Chris
    Chris about 9 years
    Those should, setTimeout is queuing asynchronous code to be ran later on. setTimeout will immediately queue that code to be run later, and then move on to the next console.log. Try moving your "ok..." code inside of function() { getPC(lapetus,pc_id); }