Typescript 这是在使用decorator调用异步函数时发生的
我的文件名为Typescript 这是在使用decorator调用异步函数时发生的,typescript,Typescript,我的文件名为commands.js。在我的概念中,它将在调用实际函数之前被调用,并将检查消息是否有内容,内容是否等于(或类似于)cmd。在我使函数异步之前,一切都正常。我用decorator(根据tsc的提示)转换了文件,结果如下: import { Message } from "discord.js"; export function command(cmd:string, eq:boolean=false) { return (target, propertyKey: strin
commands.js
。在我的概念中,它将在调用实际函数之前被调用,并将检查消息
是否有内容
,内容
是否等于(或类似于)cmd
。在我使函数异步之前,一切都正常。我用decorator(根据tsc
的提示)转换了文件,结果如下:
import { Message } from "discord.js";
export function command(cmd:string, eq:boolean=false) {
return (target, propertyKey: string, descriptor: TypedPropertyDescriptor<(msg: Message) => Promise<void>>) => {
let f = descriptor.value;
descriptor.value = (msg: Message) => {
if(!msg.content || msg.content.trim() === "") {
return Promise.resolve<void>(undefined);
}
if(!msg.author) {
return Promise.resolve<void>(undefined);
}
if(eq && msg.content !== cmd) {
return Promise.resolve<void>(undefined);
} else if(!eq && !msg.content.startsWith(cmd + " ") && msg.content !== cmd) {
return Promise.resolve<void>(undefined);
}
if(f) {
return f.call(f.caller, msg);
} else {
return Promise.resolve<void>(undefined);
}
};
return descriptor;
};
};
从“discord.js”导入{Message};
导出函数命令(cmd:string,eq:boolean=false){
return(target,propertyKey:string,descriptor:TypedPropertyDescriptor>)=>{
设f=descriptor.value;
descriptor.value=(消息:消息)=>{
如果(!msg.content | | msg.content.trim()==“”){
返回承诺。解决(未定义);
}
如果(!msg.author){
返回承诺。解决(未定义);
}
if(eq&&msg.content!==cmd){
返回承诺。解决(未定义);
}如果(!eq&&!msg.content.startsWith(cmd+“”)&&msg.content!==cmd){
返回承诺。解决(未定义);
}
如果(f){
返回f.call(f.caller,msg);
}否则{
返回承诺。解决(未定义);
}
};
返回描述符;
};
};
它可以工作,但在实函数(f
)中,这个
不会持久存在,因此无法从中获得任何信息
我做错了什么,以及如何将此
返回到异步函数中
@command("!ping", true)
async onMessage(msg:Message) {
msg.react("change descriptor to be classic function and then you can access scope directly from this
. Also if you change descriptor.value to be an async function, you can use await directly in decorator. https://stackblitz.com/edit/typescript-dycwcg
descriptor.value = async function(msg: Message) {
await f.apply(this, msg);
}
@命令(“!ping”,true)
异步onMessage(消息:Message){
msg.react(“将descriptor更改为经典函数,然后您可以直接从此
访问作用域。此外,如果您将descriptor.value更改为异步函数,则可以在decorator中直接使用wait