1

当我使用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-Gateway 无论如何都会将上下文参数传递给 lambda 函数,lambda 函数怎么能不定义参数?(这不会在 lambda 调用期间导致运行时错误吗?)

版本 3 以完全不同的范式定义,即不是异步函数,我认为这是旧版本无服务器框架生成的骨架函数。

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

4

1 回答 1

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 版。

于 2019-10-22T21:27:05.123 回答