web-dev-qa-db-fra.com

Contexte vs rappel dans AWS Lambda

J'adore utiliser les fonctions lambda dans AWS. Idéalement, cela réduisait mon temps de maintenance des serveurs. Ma question est lorsque vous utilisez lambda il y a un objet contextuel et la fonction de rappel pour terminer la fonction. Existe-t-il un cas d'utilisation de callback sur le contexte?.

Quelqu'un pourrait-il me dire le comportement de context.succeed () pour rappeler (erreur, message)

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 est la méthode de travail la plus ancienne et est prise en charge par le moteur d'exécution 0.10.42 (le paramètre callback ne l'étant pas spécifiquement). Si vous utilisez les versions plus récentes (4.3 et 6.10), la compatibilité est incluse, mais la méthode "appropriée" consiste désormais à utiliser la fonctionnalité callback.

9
James Thorpe

Herecallback représenté comme une amélioration pour context.succeed.

De plus, la boucle event permet à Node.js d’effectuer des opérations d’E/S non bloquantes. Si callback attend plus longtemps que prévu, cela signifie qu'il existe d'autres tâches non terminées dans la boucle d'événements que vous ne connaissez pas. Il s'agit d'un problème: vous devez savoir quelles tâches sont en attente dans la file d'attente. Vous pouvez utiliser les fonctions suivantes pour comprendre pourquoi callback est en attente: 

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

Congeler le lambda avant d’achever ces tâches peut entraîner un comportement inattendu. La prochaine exécution lambda peut être effectuée sur le même conteneur. Cela signifie que les tâches de boucle d'événement de l'exécution précédente lambda sont terminées dans l'exécution actuelle de lambda. 

De plus, en supposant que vous avez plus d'un test pour exports.handler, avec callback, chaque test est indépendant. Avec context.succeed, votre deuxième test peut réussir (au lieu d’échouer) en raison du premier test, laissant des tâches dans la boucle d’événements. 

3
KernelMode