Контекст против обратного вызова в 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, вы второй тест можете пройти (вместо сбоя) из-за первого теста, оставив задачи в цикле событий.