Разница в трех определениях лямбда-функций (handler.js) - PullRequest
1 голос
/ 23 октября 2019

Я вижу разные примеры определений скелетных функций в handler.js, когда играю с Serverless Framework . В handler.js

  1. Версия 1: module.exports.handler = async (event, context) => {...};
  2. Версия 2: module.exports.store = async event => {...}
  3. Версия 3: module.exports.store = (event, context, callback) => {...}

Версия 1 и Версия 2 похожи в том, что они оба определены как асинхронные функции, и единственное различие заключается в количестве параметров, но почему Версия 2 может полностью игнорировать контекст? Я предполагаю, что API-шлюз все равно передаст параметр контекста лямбда-функции, как лямбда-функция не может определить аргумент? (не приведет ли это к ошибке времени выполнения во время лямбда-вызова?)

Версия 3 определена в совершенно другой парадигме, т. е. не в асинхронной функции, и я думаю, что это скелетная функция, сгенерированная более старой версией. Безсерверный фреймворк.

Может кто-нибудь дать мне какое-нибудь руководство здесь?

1 Ответ

1 голос
/ 23 октября 2019

Основное различие между версиями 1/2 и версией 3 заключается в синтаксисе JS. Версия 1/2 использует более современный async/await синтаксис. Версия 3 старше и использует обратные вызовы. Вы можете прочитать больше о различиях здесь: https://medium.com/@ThatGuyTinus/callbacks-vs-promises-vs-async-await-f65ed7c2b9b4

Как вы заметили, единственная разница между версиями 1 и 2 - это объект Context. Это обеспечивается AWS и включает в себя полезные лямбда-специфические атрибуты и методы, такие как getRemainingTimeInMillis(), который сообщает вам, как долго ваша функция может выполняться.

Подробнее об этом можно прочитать здесь: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html

Я бы сказал, что большинство людей используют Версию 1 в наши дни.

...