node.jsのcontext.succeedで気をつけること

context.succeed("Success");

のように書いておくと、実行したプログラムがエラーなく正常に動いた時に、コンソールに

Success

と表示されます。

しかし、context.succeedが実行されると、プログラムが勝手に終了しまうようです。

例えば、

// get all instances
var DI_params = {
  DryRun: false,
  MaxResults: 10,
  NextToken: null
};
ec2.describeInstances(DI_params, function(DI_err, DI_data) {
  if (DI_err) console.log(DI_err, DI_err.stack); // an error occurred
  else     console.log(DI_data);           // successful response
});

context.succeed("Success"); 

のように書くとします。

プログラムは上から一行ずつ実行されますが、

ec2.describeInstances(DI_params, function(DI_err, DI_data) {
  if (DI_err) console.log(DI_err, DI_err.stack); // an error occurred
  else     console.log(DI_data);           // successful response
});

の部分で時間がかかるとします。 このとき、node.jsが非同期処理であるがゆえに

context.succeed("Success"); 

のせいで、時間がかかるコードが終了する前に、プログラムが勝手に終了してしまい、所望の結果が得られないということがあります。

これを回避するやり方は色々とあるそうですが、とりあえず、

context.succeedを書かない

ことで解決できます。

また、これを書かないことにより、

{
  "errorMessage": "Process exited before completing request"
}

のようにエラーが出ますが、影響はないので、心配はいりません。