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);
};
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
.
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.