Skip to content

Instantly share code, notes, and snippets.

@hassy
Last active September 19, 2022 17:20
Show Gist options
  • Save hassy/eaea5a958067211f2fed02ead13c2678 to your computer and use it in GitHub Desktop.
Save hassy/eaea5a958067211f2fed02ead13c2678 to your computer and use it in GitHub Desktop.
Different behavior of context.succeed() vs callback() in AWS Lambda
//
// Lambda's timeout needs to be >5 seconds, 10 should do
//
var startedAt = new Date();
var interval = setInterval(function () {
console.log(startedAt, new Date());
}, 1000);
exports.handler = function (event, context, callback) {
setTimeout(function () {
console.log('returning');
// v1:
return callback(null);
// v2:
// return context.succeed();
}, 5000);
};
@DaVincii
Copy link

The nodejs event loop in your case may not be empty that's why the callback function doesn't work and when you set callbackWaitsForEmptyEventLoop= false, the event loop is not into consideration and the function is terminated straight away.

This may be happening because of the open connections to databases or waiting on some other I/O operation which is not letting the event loop to go empty.

@rodrigomf24
Copy link

@DaVincii is right, I can use callback() and it completes the request as long as there's no other connection/process hanging, in my case the connection to the db was still open so my lambda would timeout and never complete the request, after closing the client connection it resolved as expected.

@lfreneda
Copy link

same as @rodrigomf24, I forgot my db connection open.. after closing it resolved as expected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment