/**
 * 节流器
 *
 * 指定时间内最多执行一次
 * @param limit 指定的时间(毫秒)
 * 
 * ```
 * 
 * ```
 */
export function throttle(fn: Function, limit: number) {
  let wait = false;

  return function () {
    if (wait === false) {
      wait = true;
      setTimeout(function () {
        wait = false;
      }, limit);
      fn.apply(this, arguments);
    }
  };
}

/**
 * 节流装饰器
 *
 * 指定时间内最多执行一次
 * @param limit 指定的时间(毫秒)
 */
export function Throttle(limit: number): MethodDecorator {
  return function (
    target: Object,
    propertyKey: string | symbol,
    descriptor: PropertyDescriptor
  ) {
    descriptor.value = throttle(descriptor.value, limit);
  };
}
