after.js

  1. import defaultTo from './defaultTo';
  2. import { FUNC_ERROR_TEXT } from './internals/helpers';
  3. import toNumber from './toNumber';
  4. /**
  5. * 创建一个函数,当它被调用 `n` 或更多次之后触发 `func`。
  6. *
  7. * @alias module:Function.after
  8. * @since 1.0.0
  9. * @param {number} n 函数应该在调用多少次后执行。
  10. * @param {Function} func 用来限定的函数。
  11. * @returns {Function} 新的限定函数。
  12. * @example
  13. *
  14. * const saves = ['profile', 'settings'];
  15. * const done = after(saves.length, () => console.log('done saving!'));
  16. *
  17. * saves.forEach(item=>{
  18. * console.log(item);
  19. * done();
  20. * });
  21. * // 'profile'
  22. * // 'settings'
  23. * // 'done saving!'
  24. *
  25. */
  26. function after(n, func) {
  27. if (typeof func !== 'function') {
  28. throw new TypeError(FUNC_ERROR_TEXT);
  29. }
  30. n = defaultTo(toNumber(n), 0);
  31. return function () {
  32. if (--n < 1) {
  33. // @ts-ignore
  34. // eslint-disable-next-line prefer-rest-params
  35. return func.apply(this, arguments);
  36. }
  37. };
  38. }
  39. export default after;