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

Gee*_*cks 10 javascript amazon-web-services node.js 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"
Run Code Online (Sandbox Code Playgroud)

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

log*_*yth 12

您没有关注Lambda期望的API.正如文档所说,它期望

exports.myHandler = function(event, context, callback) {};
Run Code Online (Sandbox Code Playgroud)

然后它将调用

const handlers = require('your-module');
handlers();
Run Code Online (Sandbox Code Playgroud)

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

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

exports.myHandler = function(event, context, callback) {
    new widget(event, context, callback);
};
Run Code Online (Sandbox Code Playgroud)

  • 正是这个重要且不明显的细节杀死了"ES6"化Lambda代码的努力:`"它需要一个可调用的函数,而不是一个可构造的函数".很好的答案. (2认同)