Node.js - 使用带有装饰器和Typescript的eventemitters

时间:2017-11-08 00:39:43

标签: javascript node.js typescript decorator eventemitter

我正在尝试创建一个装饰器,每当它下面的函数开始然后结束时都会触发一个事件。我创建了一个扩展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的资源吗?

0 个答案:

没有答案