wake-up-neo.com

Kontext vs Rückruf in AWS Lambda

Ich liebe es, Lambda-Funktionen in AWS zu verwenden. Es hat im Idealfall meine Zeit für die Wartung der Server reduziert. Meine Frage ist, wenn Sie Lambda verwenden, gibt es ein Kontextobjekt und die Callback-Funktion, um die Funktion zu beenden. Gibt es einen Anwendungsfall der Verwendung von Callback über Kontext?.

Könnte mir jemand das Verhalten von context.succeed () zum Rückruf (Fehler, Nachricht) mitteilen

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);
};
8
Naveen Kerati

context.succeed ist die ältere Vorgehensweise und wird unter der Laufzeit 0.10.42 unterstützt (wobei der callback-Parameter nicht spezifisch ist). Wenn Sie mit den neueren Laufzeiten (4.3 und 6.10) arbeiten, ist dies aus Gründen der Abwärtskompatibilität enthalten. Die "korrekte" Methode ist jedoch die Verwendung der callback-Funktionalität.

9
James Thorpe

Hiercallback wird als Verbesserung für context.succeed dargestellt.

Darüber hinaus ermöglicht die event-Schleife Node.js, nicht blockierende E/A-Vorgänge auszuführen. Wenn callback länger wartet, als Sie erwarten, bedeutet dies, dass sich in der Ereignisschleife weitere nicht abgeschlossene Aufgaben befinden, die Sie nicht kennen. Dies ist ein Problem. Sie sollten wissen, welche Aufgaben in der Warteschlange warten. Sie können die folgenden Funktionen verwenden, um zu verstehen, warum callback wartet: 

process._getActiveHandles() //gets you handles that are still alive
process._getActiveRequests() //gets you info about active libuv requests.

Das Einfrieren des Lambda vor dem Ausführen dieser Aufgaben kann zu unerwartetem Verhalten führen. Die nächste Lambda-Ausführung kann auf demselben Container erfolgen. Das bedeutet, dass Ereignisschleifen-Tasks der vorherigen Lambda-Ausführung in der aktuellen Lambda-Ausführung abgeschlossen werden. 

Vorausgesetzt, Sie haben mehr als einen Test für exports.handler, mit callback ist jeder Test unabhängig. Mit context.succeed kann der zweite Test aufgrund des ersten Tests bestanden werden (anstatt zu scheitern), wodurch die Tasks in der Ereignisschleife verbleiben. 

3
KernelMode