Триггерная функция отладки два раза независимо - PullRequest
0 голосов
/ 24 мая 2018

Я объявил 'услугу':

// 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 также не решают проблему.

Спасибо!

1 Ответ

0 голосов
/ 24 мая 2018

Я думаю, вы можете обернуть 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;
};
...