【发布时间】:2018-02-02 22:43:29
【问题描述】:
我正在尝试在 TypeScript 中构建 AWS Serverless(https://serverless.com/) 函数。
具体来说,我定义了一个抽象类,它有一个调用一些私有方法的公共方法。
这是我简化的 TypeScript 类:
export abstract class AbstractPayloadProcessor {
private preHandlePayload(payload) {
console.log('arrived in prehandle method')
}
private postHandlePayload(payload) {
console.log('arrived in posthandle method')
}
protected handleException(error) {
console.log('Exception has occurred:', error)
}
public processPayload(event) {
// this is the problematic line
this.preHandlePayload(event.payload)
.
.
.
}
}
我使用 webpack 将其转译为 ES5,生成以下 JavaScript:
var AbstractPayloadProcessor = /** @class */ (function () {
AbstractPayloadProcessor.prototype.preHandlePayload = function (payload) {
console.log('arrived in prehandle method');
};
AbstractPayloadProcessor.prototype.postHandlePayload = function (payload) {
console.log('arrived in posthandle method');
};
AbstractPayloadProcessor.prototype.handleException = function (error) {
console.log('Exception has occurred:', error);
};
AbstractPayloadProcessor.prototype.processPayload = function (event) {
// this line throws the exception
this.preHandlePayload(event.payload);
.
.
.
}());
确切的例外是:
TypeError: Cannot read property 'preHandlePayload' of undefined
到目前为止,我已经尝试将 webpack 配置设置为使用 ES6,并尝试使用箭头函数在 typescript 中声明函数。两者都产生相同的异常。
processPayload 函数在 Serverless 框架内被调用somewhere,但我不知道实现细节。如果有人对该框架有经验并能对此有所了解,我将不胜感激。
感谢阅读。
【问题讨论】:
-
如何调用
processPayload函数?这就是决定this的原因。 -
啊,不错。我实际上是在使用无服务器框架来定义 AWS 函数。我将更新问题以包含该详细信息,但我不太确定无服务器实际上如何调用您定义的逻辑。我得看看我能找到什么
-
我可以肯定的告诉你,这与
abstract、public或private的使用无关。 -
如果您显示实现抽象类的类以及调用函数的位置会有所帮助。
-
我可以告诉你,这与无服务器框架无关。
标签: javascript typescript webpack serverless-framework