0

非同期コーディングのために脳を再配線しようとしましたが、まだ失敗しているようです。残念ながら、この場合、適切に行う方法がわかりません。例を挙げましょう:

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

ありがとう

4

1 に答える 1

2

nummessages再帰呼び出しでを渡すのを忘れたようです:

decodemessage(i+1, nummessages);

そのため、再帰を使用する場合、個人的にはほとんど逆方向 (ゼロ) にループします。

于 2012-11-07T11:26:36.317 に答える