我在测试时发现了这个错误https://github.com/ztytotoro/rxjs-extension/blob/master/src/decorators.ts#L20
export const AsyncFunction = async function () {}.constructor;
export function isAsyncOrPromise(fn: any): boolean {
return fn instanceof Promise || fn instanceof AsyncFunction;
}
⏯游乐场链接
游乐场链接: 提供
代码
function Log(target: any, key: string | symbol, descriptor: PropertyDescriptor): void {
const type = Reflect.getMetadata('design:returntype', target, key);
console.log(key, type.constructor.name);
}
class Demo {
@Log
async save(n: number): Promise<string> {
const result = await Promise.resolve(`${n} succeed`);
return result;
}
}
const demo = new Demo();
async function main(): Promise<any> {
console.log('main', main.constructor.name);
const result = await demo.save(1);
}
main();
实际行为
save Function
main AsyncFunction
预期行为
save AsyncFunction
main AsyncFunction
演示2
function Log(target: any, key: string | symbol, descriptor: PropertyDescriptor): void {
const type = Reflect.getMetadata('design:returntype', target, key);
console.log(key, type instanceof Promise);
}
class Demo {
@Log
async save(n: number): Promise<string> {
const result = await Promise.resolve(`${n} succeed`);
return result;
}
}
const demo = new Demo();
async function main(): Promise<any> {
const result = await demo.save(1);
}
main();
游乐场链接: 提供
实际行为
save false
预期行为
save true