I try to rewire my brain for async coding and I still I still seem to fail. Unfortunately I can't figure out how to do it properly in this case. Let me give an example:
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);
});
This gets called by gammu-smsd which receives SMS messages and puts them into ENV vars and launches a script. This works fine as long as I run it on my own, return code seems to work as well. When I run it from gammu-smsd it fails and it looks like decodemessage is never executed. Some debug output shows that I do go into runme().
My guess is that the callback in runme() gets executed before the recursive decodemessage() call is done. Am I right and if so can someone explain how I can do that properly?
If you want to test run it like this:
node server.js --SMS_MESSAGES 2 --SMS_1_TEXT blabliblo --SMS_1_NUMBER=47796546546 --SMS_2_TEXT Iammessagetwo --SMS_2_NUMBER 12345678
Thanks
Seems like you forgot to pass on the nummessages
in your recursive call:
decodemessage(i+1, nummessages);
That's why I personally mostly loop backwards (to zero) when using recursion.