NodeJS:完成后调用功能

时间:2015-08-22 17:44:12

标签: node.js

我有一个功能,可以做一些工作。完成后,它会调用回调。在那之后我得到了结束'在控制台。但我需要再次执行相同的功能。我怎样才能做到这一点? THX。

function start(callback){
  //... some work ... 
  if(work_finished){
    callback();
  }
}

start(function(){
    console.log('END');
});

2 个答案:

答案 0 :(得分:0)

如果你的函数是异步的,你可以创建一个包装函数,然后再从回调中再次调用它。请注意,没有任何终止条件,这将永远运行。

function start(callback){
  //... some work ... 
  if(work_finished){
    callback();
  }
}

function run() {
    start(function(){
        console.log('END');
        run();
    });
}

如果你的函数不是异步的,上面的操作最终会导致堆栈溢出(由于无限递归),所以你必须让调用者start()再次触发它:

function start(callback){
  //... some work ... 
  if(work_finished){
    callback();
  }
  // then return true or false depending upon whether you want
  // it to keep getting called again
  return true;
}

function run() {
    var more;
    do {
        more = start(function(){
            console.log('END');
        });
    } while (more === true);
}

而且,如果您只是想要定期调用函数,可以像这样使用setInterval()

// call my function every 5 seconds
var timer = setInterval(function() {
    start(function(){
        console.log('END');
    });
}, 5000);

答案 1 :(得分:0)

有很多方法可以在节点中重复执行函数。

  • 递归电话

代码:

function start(callback){
  //... some work ... 
  if(work_finished){
    callback();
    // call function again
    // should be OK if some work is async so it doesn't 
    // block the thread
    start(callback);
    // or schedule to be called at end of event loop
    // setImmediate(start, callback);
  }
}

start(function(){
    console.log('END');
});
  • 执行任意数量的额外时间功能,这需要跟踪多少来电

  • 将函数设置为要调用的间隔~n毫秒

setInterval(start, 1000, callback);