非同期コーディングのために脳を再配線しようとしましたが、まだ失敗しているようです。残念ながら、この場合、適切に行う方法がわかりません。例を挙げましょう:
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);
});
これは、SMS メッセージを受信し、それらを ENV 変数に入れ、スクリプトを起動する gammu-smsd によって呼び出されます。これは、私が自分で実行している限り問題なく動作し、リターン コードも同様に動作するようです。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
ありがとう