【问题标题】:setTimeout not working with node.jssetTimeout 不适用于 node.js
【发布时间】:2015-07-02 05:11:31
【问题描述】:

我正在编写 mocha 测试用例来测试以下步骤。我打算进行 API 调用并等待 30 分钟,然后再调用另一个 API。我正在使用一个内部节点 API,它是为了调用 REST API 来编写这个测试用例而编写的。但由于某种原因,setTimeout 没有等待给定的 ms。 有人可以帮我吗?

 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
    .....
    ......
 };
  });

它不会等待 30 分钟。我输入的回调(getPC 方法)立即执行。

感谢任何帮助。

谢谢

【问题讨论】:

    标签: javascript node.js settimeout


    【解决方案1】:

    您的回调正在立即执行,因为您当时正在调用它。

    将其更改为this.setTimeout(function() { getPC(lapetus,pc_id); }, 18000000);,以便您要执行的内容位于setTimeout 调用的函数中。

    ** 编辑 **

    关于我的上一条评论。你应该把你的“ok...”移到你放在setTimeout里面的函数里面。这将导致 "ok..." 在调用 getPC 之前立即执行。

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

    重要的是要了解setTimeout 只会启动一个计时器,该计时器将在以后执行您的代码。 setTimeout 将启动该计时器,而不是等待它完成。一旦完成启动该计时器,它将移动到下一段代码。

    【讨论】:

    • 嗨,克里斯,谢谢,但我只是将超时调用更改为 this.setTimeout(function() {getPC(lapetus,pc_id);}, 18000000);..即使这样我也看到调用是无需等待就发生了:(
    • 这是我的输出:等待... 2015 年 4 月 23 日星期四 13:11:04 GMT-0700 (PDT) 好的... 2015 年 4 月 23 日星期四 13:11:04 GMT-0700 (PDT) )
    • 那些应该,setTimeout 正在排队异步代码以供稍后运行。 setTimeout 将立即将该代码排队以待稍后运行,然后转到下一个 console.log。尝试在function() { getPC(lapetus,pc_id); } 中移动你的“ok...”代码
    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多