1

我在测试时发现了这个错误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
4

0 回答 0