在递归函数完成后退出node.js

时间:2012-11-07 11:08:49

标签: javascript node.js asynchronous recursion callback

我尝试重新连接我的大脑以进行异步编码,但我仍然似乎仍然失败了。不幸的是,在这种情况下,我无法弄清楚如何正确地做到这一点。让我举个例子:

var nconf = require('nconf');

 nconf.argv()
 .env();

 function runme(callback){
   var nummessages = nconf.get('SMS_MESSAGES');
   decodemessage(0, nummessages);
   callback();
 }

 function decodemessage(i, nummessages) {
  if( i < nummessages ) {
    var message = 'SMS_'+(i+1)+'_TEXT';
    var number = 'SMS_'+(i+1)+'_NUMBER';
    console.log('number: '+number);
    console.log('message: '+message);
    console.log('message text: '+ nconf.get(message));
    console.log('message number: '+ nconf.get(number));
    decodemessage(i+1);
  }
} 

runme(function(){
  process.exit(0);
});

这由gammu-smsd调用,它接收SMS消息并将它们放入ENV vars并启动脚本。这个工作正常,只要我自己运行它,返回代码似乎也可以工作。当我从gammu-smsd运行它时它失败了,看起来它似乎从未执行过decodemessage。一些调试输出显示我进入runme()。

我的猜测是runme()中的回调在递归decodemessage()调用完成之前执行。我是对的,如果有的话,有人可以解释我怎么能做到这一点吗?

如果你想测试运行它:

node server.js --SMS_MESSAGES 2 --SMS_1_TEXT blabliblo --SMS_1_NUMBER=47796546546 --SMS_2_TEXT Iammessagetwo --SMS_2_NUMBER 12345678

由于

1 个答案:

答案 0 :(得分:2)

好像你忘记在递归电话中传递nummessages

decodemessage(i+1, nummessages);

这就是为什么我个人在使用递归时主要向后循环(为零)。