AWS Lambda – 奇怪的堆栈跟踪

我们正在用node.js 4.3编写AWS lambda函数,但是我们遇到了抛出错误的奇怪behaviour

第一:

 'use strict'; exports.handler = function(event, context, callback) { throw new Error(); }; 

这是像预期的抛出:

  at exports.handler (/var/task/TestCode.js:4:11) 

但是,如果我们添加一个函数(即使是未调用的),它调用一个不同的类/ obj的函数,其中包含一个带有obj的lambdaexpression式,我们得到一个神秘的投掷信息。 为了让事情更容易理解,下面是一些代码:

 'use strict'; function aRandomFunction() { something.foo((obj) => {}); } exports.handler = function(event, context, callback) { throw new Error(); }; 

现在我们得到一个日志,我们不明白为什么:

  at something.foo.exports.handler (/var/task/TestCode.js:8:11) 

有人可以解释我为什么会发生? 这似乎是一些JS魔法,我不明白:)

谢谢

修订答案 – 升级到v6.1

您的问题是节点版本4.3。 升级到6.1将解决问题。

我重新创build了您提供的代码片段,并在两种环境中运行它。 以下错误分别给出了两种情况。

  • 4.3

    • at something.foo.module.exports.test (/var/task/handler.js:56:10)
    • 意外的结果。
  • 6.1

    • at module.exports.test (/var/task/handler.js:56:10)
    • 这将是预期的结果。

原始答案 – polyfill

你的问题是你的箭头函数在错误消息中引用的行…

 'use strict'; function aRandomFunction() { something.foo((obj) => {}); // illegal arrow function (ES6 not supported in Lambda environment by default) } exports.handler = function(event, context, callback) { throw new Error(); };