方法 babel 装饰器没有被执行

method babel decorators isn't executed

我正在使用 babel 7 decorator plugin,我有一个简单的 class,我想在一个简单的 try catch 包装器中装饰每个方法。

这是完成的:

const errorHandler = () => {
  return (target, property, descriptor) => {
    try {
      return descriptor
    } catch (e) {
      console.error('error from the decorator', e)
    }
  }
}

这是我的示例 class:

class Example {
  @errorHandler
  addComponent() {
    throw new Error('Error')
  }
}

但是当我执行该函数时,它不会在执行前抛出装饰器,只会在 class 初始化时进行预评估。

有什么想法吗?

您正在返回 descriptor,这是一个函数对象,它由 try/catch 块外的调用者执行。要拦截异常 - 你应该自己执行 descriptor

正确的代码是:

const errorHandler = (target, property, descriptor) => {
  const original = descriptor.value;
  if (typeof original === 'function') {
    descriptor.value = async function(...args) {
      try {
        return await original.apply(this, args);
      } catch (e) {
        console.error('error from the decorator', e)
      }
    }
  }
}

class Example {
  @errorHandler
  addComponent() {
    throw new Error('Error')
  }
}

new Example().addComponent();