此修饰器将专门用于成功解决Promise时发送事件的分析。
class Foo {
@LogEvent("success")
async bar() {
await someAction();
}
}
我已经在网络上阅读了一些文章,我想我必须获取一个函数的描述符(因为类的已编译方法是函数),然后我需要对它是否是异步的进行分类... Typescript可能会带来一些麻烦,因为它将某些异步方法标记为非异步方法,并且还取决于它针对的EcmaScript标准是什么—失败时可能会出现很多情况!当然有写稳定解决方案的方法。
您的意见?
怎么样:
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仅适用于异步方法,所以我不知道您说打字稿仅将某些异步方法标记为非异步,对此有任何来源吗?