如何编写仅在Promise.resolve()上执行的异步方法的装饰器?

问题描述 投票:0回答:1

此修饰器将专门用于成功解决Promise时发送事件的分析。

class Foo {

  @LogEvent("success")
  async bar() {

    await someAction();

  }

}

我已经在网络上阅读了一些文章,我想我必须获取一个函数的描述符(因为类的已编译方法是函数),然后我需要对它是否是异步的进行分类... Typescript可能会带来一些麻烦,因为它将某些异步方法标记为非异步方法,并且还取决于它针对的EcmaScript标准是什么—失败时可能会出现很多情况!当然有写稳定解决方案的方法。

您的意见?

angular typescript async-await tsc typescript-decorator
1个回答
0
投票

怎么样:

function LogEvent(param: string) {
    return (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<(... params: any[])=> Promise<any>>) => {
        let oldFunc = descriptor.value;
        descriptor.value = async function (){
            const result = await oldFunc.apply(this, arguments);
            await analytics.send(param);
            return result;
        }
    }
}

灵感来自:Typescript, decorate async function

这样,Decorator仅适用于异步方法,所以我不知道您说打字稿仅将某些异步方法标记为非异步,对此有任何来源吗?

© www.soinside.com 2019 - 2024. All rights reserved.