Контекст против обратного вызова в AWS Lambda
Мне нравится использовать лямбда-функции в AWS. Это идеально сократило мое время в обслуживании серверов. Мой вопрос заключается в том, что при использовании лямбда есть объект контекста и функция обратного вызова для завершения функции. Есть ли какой-либо вариант использования обратного вызова по контексту.
может кто-нибудь сказать мне поведение контекста.succeed() для обратного вызова(ошибка,сообщение)
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);
};
2 ответов
context.succeed
является более старым способом делать вещи и поддерживается в среде выполнения 0.10.42 (где callback
параметр специально не является). Если вы работаете в более новых средах выполнения (4.3 и 6.10), он включен для обратной совместимости, но "правильный" способ теперь использовать callback
функциональность.
здесь callback
представлено как улучшение для context.succeed
.
кроме того,цикл обработки событий позволяет узлу.JS для выполнения неблокирующих операций ввода-вывода. если callback
ждет дольше, чем вы ожидаете, это означает, что в цикле событий есть другие незавершенные задачи, о которых вы не знаете, и это проблема-вы должны знать, какие задачи ждут в очереди. Вы можете использовать следующие функции чтобы понять, почему callback
ждет:
process._getActiveHandles() //gets you handles that are still alive
process._getActiveRequests() //gets you info about active libuv requests.
замораживание лямбды перед выполнением этих задач может привести к неожиданному поведению. Следующее выполнение lambda может быть выполнено в том же контейнере. Это означает, что задачи цикла событий предыдущего выполнения лямбда завершаются в текущем выполнении лямбда.
кроме того, предполагая, что у вас есть более одного теста для exports.handler
С callback
каждый тест независим. С context.succeed
, вы второй тест можете пройти (вместо сбоя) из-за первого теста, оставив задачи в цикле событий.