4

別のラムダ関数内から非同期ラムダ関数を呼び出そうとしていますが、呼び出し元の関数がすぐに終了すると実行されないことがわかりました。

言い換えれば、以下は決して機能しません。LambdaFunction2 が呼び出されることはありません。

function lambdaFunction1(event, context) {
  callLambdaFunction2();
  context.done(null);
}

ただし、LambdaFunction1 が終了する前に少し遅延を追加すると、これまでのところうまくいく傾向があります。

function lambdaFunction1(event, context) {
  callLambdaFunction2();
  setTimeout(
    function() {
     context.done(null);
    }, 500
  );
}

私が懸念しているのは、500ミリ秒待機することはかなり恣意的な魔法の数であることです. 誰かが同様の問題に遭遇し、より原則的な修正を見つけましたか?

4

1 に答える 1

5

callLambdaFunction2()context.done(null)ハンドラーが終了する前に完了しない可能性があります。

これを修正するには、コールバックとして呼び出す必要がありcontext.doneます。例えば:

lambda.invoke({
    FunctionName: "functionName",
    InvocationType: 'Event',
    Payload: JSON.stringify(event)
}, function(err, data) {
    if (err) return context.done(err, null);
    return context.done(null, data);
});

これが解決策でない場合は、どのように実装したかを示してもらえますcallLambdaFunction2か?

于 2015-06-16T10:13:58.190 に答える