三种lambda函数定义(handler.js)的区别

时间:2019-10-22 21:06:34

标签: aws-lambda serverless-framework

当我玩Serverless Framework时,在handler.js中看到了骨架函数定义的不同示例。在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网关无论如何都会将上下文参数传递给lambda函数,lambda函数如何不定义参数? (这不会在lambda调用期间引起运行时错误吗?)

版本3是在完全不同的范例中定义的,即不是异步函数,我认为这是由较早版本的Serverless框架生成的框架函数。

有人可以给我一些指导吗?

1 个答案:

答案 0 :(得分:1)

1/2版和3版之间的主要区别在于JS语法。版本1/2使用更现代的async/await语法。版本3较旧,并使用回调。您可以在这里了解更多差异:https://medium.com/@ThatGuyTinus/callbacks-vs-promises-vs-async-await-f65ed7c2b9b4

您已经注意到,版本1和版本2之间的唯一区别是Context对象。这是由AWS提供的,包括有用的特定于lambda的属性和方法,例如getRemainingTimeInMillis(),它告诉您函数可以执行多长时间。

您可以在此处了解更多信息:https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html

我想说,如今大多数人都在使用版本1。