【问题标题】:Trigger debounce function two times independently独立触发两次去抖功能
【发布时间】:2018-05-24 12:07:54
【问题描述】:

我已经声明了“服务”:

// 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;
};

ValidatorA 和ValidatorB 链接到模板中的不同输入,并且几乎同时运行。 (延迟 1 秒)

我想要实现的是ValidatorA和ValidatorB会独立调用myService.someService,所以应该同时有两个调用。目前它只调用一次(来自ValidatorB,因为它在一秒钟后被调用)。我想ValidatorB 正在覆盖来自ValidatorA 的调用。

创建两个相同的方法可以解决这个问题,但是我相信还有更优雅的解决方案。 Object.assign 或 _deepClone 也没有解决问题。

谢谢!

【问题讨论】:

    标签: javascript vuejs2 debouncing


    【解决方案1】:

    我认为你可以将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;
    };
    

    【讨论】:

    • 感谢您的回答。我收到__WEBPACK_IMPORTED_MODULE_2__mixins_myService__.a.getServices(...) is not a function
    • 如何导入?
    • 从'../mixins/myService'导入getServices;
    • 它也不工作 :( TypeError: Object(...)(...) is not a function 谢谢你的努力!!!
    • 这很奇怪。我又变了希望这次没事
    猜你喜欢
    • 1970-01-01
    • 2012-12-30
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2010-11-16
    • 2019-02-16
    • 1970-01-01
    相关资源
    最近更新 更多