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

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

class Foo {

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

    await someaction();

  }

}

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

您的意见吗?

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

怎么样:

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仅适用于异步方法,所以我不知道您所说的打字稿仅将某些异步方法标记为非异步,对此有任何来源吗?

本文链接:https://www.f2er.com/2346931.html

大家都在问