我正在尝试创建一个装饰器,每当它下面的函数开始然后结束时都会触发一个事件。我创建了一个扩展EventEmitter的类:
class OnActionExecuting extends EventEmitter {
constructor(handler) {
super();
this.on('onExecuting', handler);
this.emit('onExecuting');
}
}
我可以创建一个在装饰器中使用的工厂函数:
function onActionExecuting(handler) {
return () => new OnActionExecuting(handler);
}
然后像这样使用它:
class Test {
@onActionExecuting(() => console.log('started...'))
public test() {
console.log('running...')
}
}
这样输出就像预期一样(尽管我认为它没有按照我原先的想法进行):
starting...
running...
首先,我的问题是如何在下面的函数完成后为该触发器创建一个装饰器。所以,像这样:
class Test {
@onActionExecuting(() => console.log('started...'))
@onActionComplete(() => console.log('finished!'))
public test() {
console.log('running...')
}
}
会有这样的输出:
starting...
running...
finished!
其次,我觉得我根本没有正确使用这些。我是Typescript的新手,仍在学习vanilla javascript的复杂性。我遇到的最接近的事情是.NET属性(以及它们有多相似,我仍然不确定)。
有谁知道如何实现我想要的效果?或者,任何人都可以指出组合Typescript,Nodejs和decorators的资源吗?