【问题标题】:node delay execution - What's right/wrong with it?节点延迟执行 - 它有什么对/错?
【发布时间】:2016-09-24 11:44:01
【问题描述】:

起初,我是一个没有node js经验的新手,想了解更多。我写了一个延迟函数,我很感兴趣,你作为一个 javascript 专业人士是怎么想的。它有什么好的或坏的,为什么?

我尝试编写一个机器人。它有2个功能。功能 1 启动功能 2。但功能 2 不应直接启动。它必须从延迟开始。

当然,我对我的主题进行了研究,发现了这样的东西:

How Can I Wait In Node.js (Javascript), l need to pause for a period of time

How to create a sleep/delay in nodejs that is Blocking?

很遗憾,我无法理解和使用它。因此,我做了自己的尝试。它可以在我的电脑上运行,但我应该把它放在服务器上吗?

//function 1 (example)    
function start(){
    ...;
    delay(2500, 'That could be an answer');
}

//Delay
function delay(ms, msg){
  var started = new Date();
  var now;
  var diff = 0;;

  while(diff < ms){  
    now = new Date();
    diff =  now - started;
    console.log('Diff time: '+diff);
  }

  console.log('Delay started at: '+started);
  console.log('Now time: '+now);
  console.log('ms time: '+ms);  
  console.log('While loop is done.');
  answer(msg);  
}

//function 2 (example)
function answer(msg){
...
}

谢谢!

【问题讨论】:

    标签: node.js delay


    【解决方案1】:

    您可以将bluebird 承诺与.delay 一起使用,以使您的代码更干净。

    http://bluebirdjs.com/docs/api/promise.delay.html

    然后让你的 start 函数成为一个承诺:

    start().delay(2500).then(function (result) {
       // result = start function return statment
    });
    

    【讨论】:

      【解决方案2】:

      它仍然不起作用。我的延误时间超过一个小时。 Bute 函数 2 会在几秒钟后执行。

        setTimeout(function(){
          answer(msg);
        }, Math.floor(Math.random()*1000*87));
      

      【讨论】:

      • 你的延迟时间怎么超过一个小时?你有 87000 毫秒,即 87 秒乘以 0 到 1 之间的值,全部下限......你可以通过的最大超时时间是 87 秒......
      • 谢谢穆斯塔法,我错了。我的问题确实是我对以小时为单位的随机数转换的理解。
      【解决方案3】:

      这是阻塞..您的事件循环将阻止执行此代码。在 2500 毫秒的时间间隔内不会做任何其他工作,除了在循环内忙于等待。

      我不确定您为什么要这样做。如果你想在函数 1 使用 setTimeout 之后的某个时间点启动函数 2,你可以做什么。这样,函数 2 将至少在您作为参数传递给 setTimeout 函数的时间之后启动,同时允许其他代码执行而不阻塞节点事件循环。

      setTimeout(function(){
          answer(msg);
      }, 2500);
      

      【讨论】:

        猜你喜欢
        • 2015-06-26
        • 2011-11-11
        • 2018-06-24
        • 2020-07-02
        • 2010-12-22
        • 2017-10-09
        • 2010-11-02
        • 2011-06-19
        • 1970-01-01
        相关资源
        最近更新 更多