独立触发去抖功能两次

时间:2018-05-24 12:07:55

标签: javascript vuejs2 debouncing

我已宣布'服务':

// myService.js
export default {
  someService: _.debounce(
    function  someService(rule, value, callback) {
      myApi.get(
        `check-input/${value}`,
      )
      .then((response) => {
        if (response.data.valid) {
          callback();
        } else {
          callback(new Error('Invalid value'));
        }
      })
      .catch(() => {
        callback(new Error('Internal error. Please try later.'));
      });
  },2000)};

我想同时独立使用此服务两次。

我这样称呼这项服务:

const ValidatorA = (rule, value, callback) => {
  const serviceA = myService.someService(rule, value, callback);
  return serviceA;
};

const ValidatorB = (rule, value, callback) => {
  const serviceB = myService.someService(rule, value, callback);
  return serviceB;
};

ValidatorAValidatorB链接到模板中的不同输入,几乎同时运行。 (1s延迟)

我希望实现的是ValidatorAValidatorB将独立调用myService.someService,因此应该同时进行两次调用。目前它只调用一次(从ValidatorB调用,因为它在一秒钟之后被调用)。我认为ValidatorB正在覆盖ValidatorA的来电。

创建两个相同的方法是解决这个问题,但我相信有更优雅的解决方案。 Object.assign_deepClone也未解决问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你可以将someServices包裹在一个函数

export default {
    getServices: function() {
      return 
        _.debounce(
        function  someService(rule, value, callback) {
          myApi.get(
            `check-input/${value}`,
          )
          .then((response) => {
            if (response.data.valid) {
              callback();
            } else {
              callback(new Error('Invalid value'));
            }
          })
          .catch(() => {
            callback(new Error('Internal error. Please try later.'));
          });
      },2000)
     }
};

然后

const ValidatorA = (rule, value, callback) => {
  const serviceA = myService.getServices()(rule, value, callback);
  return serviceA;
};

const ValidatorB = (rule, value, callback) => {
  const serviceB = myService.getServices()(rule, value, callback);
  return serviceB;
};