我们可以在AWS Lambda中使用ES6类语法吗?

时间:2017-07-15 06:47:01

标签: javascript node.js amazon-web-services ecmascript-6 aws-lambda

我想使用Node 6.10在AWS Lambda中使用ES6类语法,但我无法使其工作:

class widget {
    constructor(event, context, callback) {
        callback(null, `all seems well!`);
    }
}

// module.exports.handler = widget; // "Process exited before completing request"
module.exports.handler = new widget(); // "callback is not a function"

有没有人使用类语法成功?类构造函数显然不会被视为处理函数。

2 个答案:

答案 0 :(得分:9)

您没有关注Lambda期望的API。作为the documentation says,它需要

exports.myHandler = function(event, context, callback) {};

然后用

调用
const handlers = require('your-module');
handlers();

这里的问题是需要使用new创建ES6类。由于Lambda API表示它需要一个函数,它需要一个可调用的函数,而不是一个可构造的函数。如果要使用类,则需要导出函数,例如

class widget {
  constructor(event, context, callback) {
    callback(null, `all seems well!`);
  }
}

exports.myHandler = function(event, context, callback) {
    new widget(event, context, callback);
};

答案 1 :(得分:1)

要回答您的问题,是的,您可以将ES6类与Node 6 Lambda函数一起使用。但是这段代码不起作用。

lambda处理程序不会在你的类上调用new,所以你的构造函数如果你只是传递就不会被激活

module.exports.handler = widget;

它会调用widget(event, context, callback)。如果您在将其传递给它之前调用new,那么您还没有来自处理程序的回调引用。您实际上是在创建一个没有初始化值的新对象。您正在调用new widget()但是您没有传递任何内容然后您正在传递此新实例以供处理程序调用。

地球上没有理由(据我所知),但你可以

class widget extends Function {
    constructor(){
      super('...args', 'return this.__call__(...args)');
      return this.bind(this);    
    }

    __call__(event, context, callback) {
     callback(null, "Dude, this is wierd.")
   }
}
exports.handler = new widget()