2015-08-22 79 views
0

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

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

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

你的意思是你想要的功能调用自身?这就是所谓的递归,它有许多(所有?)语言可用,您可以继续前进并执行它...... – Amit

+0

“但我需要再次执行相同的功能”,帮助解释在哪个函数中再次调用哪个函数? – Surely

+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); 
+0

Thx!异步函数的第一个答案就是我一直在寻找的东西:)。 –

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