Как передать аргумент функции внутри функции lodash Once? - PullRequest
1 голос
/ 06 июня 2019

Итак, я вызываю функцию, которая вызывает функцию lodash Once:

  if (isPageTwo) {
    sendSegmentData(sendEnhancedTrackEvent);
  }

И у меня есть функции, определенные здесь:

const pageTwoSegmentEvent = (sendEnhancedTrackEvent) => {
  const enhanceableData = {
    name: 'Page loaded',
    properties: {
      ...defaultProps,
      cid: getCid(),
      epid: getEpid(),
      name: 'ReviewExperienceModernDoubleStep'
    }
  };
  sendEnhancedTrackEvent(enhanceableData);
}
const sendSegmentData = (sendEnhancedTrackEvent) => {
  once(() => {
    pageTwoSegmentEvent(sendEnhancedTrackEvent);
  });
}

Я пытаюсь передать функцию обратного вызова sendEnhancedTrackEventк функции pageTwoSegmentEvent, но я предполагаю, что я пытаюсь пропустить ее через некогда функцию pageTwoSegmentEvent, которая никогда не вызывается.Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Метод _.once() принимает функцию (func) и возвращает функцию, которая вызывает функцию-оболочку (func) один раз.Согласно документации:

Функция вызывается с помощью этой привязки и аргументов созданной функции.

Что означает, что любые аргументы, которые выперейти к новой функции, будет передан в оболочке func.

В вашем случае:

  1. sendSegmentData имеет sendEnhancedTrackEvent параметр
  2. Когда вызывается sendSegmentData, он вызывает once(() => { pageTwoSegmentEvent(sendEnhancedTrackEvent); });, что создаетновая функция.Новая функция не возвращается и не вызывается.

Чтобы создать sendSegmentData, вызовите once для pageTwoSegmentEvent напрямую.Это вернет новую функцию, которая передаст все аргументы в значение pageTwoSegmentEvent.

Пример:

const { once } = _

const pageTwoSegmentEvent = (sendEnhancedTrackEvent) => console.log(sendEnhancedTrackEvent)

const sendSegmentData = once(pageTwoSegmentEvent)

sendSegmentData('1')

sendSegmentData('2')

sendSegmentData('3')
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
0 голосов
/ 06 июня 2019

_. Один раз возвращает функцию, которую нужно вызвать.Независимо от того, сколько раз вы вызываете эту функцию, она будет вызываться только один раз.

Предполагая, что once является псевдонимом _.once, попробуйте изменить его на:

const sendSegmentData = once((sendEnhancedTrackEvent) => {
    pageTwoSegmentEvent(sendEnhancedTrackEvent);
});

...

// somewhere else call it
sendSegmentData(theSegmentedData);
...