0

プロミスを使用して dynamo から複数のレコードを取得するために、アプリケーションに AWS ラムダを使用しています。最初に context.callbackWaitsForEmptyEventLoop = true を設定したので、ハンドラーは約束が解決されるまで待機します。約束が解決されたら、 context.callbackWaitsForEmptyEventLoop = false を設定してから、 callback(null); を呼び出します。

プロミスが解決された後に callbackWaitsForEmptyEventLoop = false を設定しないと、callback(null) を呼び出した後でも関数がタイムアウトになります (一部のライブラリ関数はまだイベント キューにある可能性があります)。

したがって、問題は、同じランタイムが次回に再び使用される場合、イベント キューに以前に残っていた関数が最初からやり直すのではなく、再開されることです。これを回避する方法、または前のイベント キューを空にする方法はありますか?

context.callbackWaitsForEmptyEventLoop = true;

allPromises = getDatafromDynamo();
allPromises.then(results => {
  console.log('Results are', JSON.stringify(results));
  context.callbackWaitsForEmptyEventLoop = false;
  callback(null, 'DONE');
  return;
}).catch((err) => {
  console.log("Error occurred", err);
  context.callbackWaitsForEmptyEventLoop = false;
  callback(err);
});  
4

1 に答える 1

0

グローバルな状態がどこにも維持されていないことを確認することで、この質問を解決しました。Lambda は、実行中のプロセスを次のリクエストに使用します。

于 2016-11-04T20:29:52.617 に答える