如何将arg传递给lodash的一次函数内的函数?

时间:2019-06-06 20:01:08

标签: javascript lodash

所以我正在调用一个函数,该函数调用lodash的一次函数:

  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 个答案:

答案 0 :(得分:1)

_.once()方法使用一个函数(func),并返回一个函数,该函数一次调用包装的函数(func)。根据文档:

  

使用此绑定和创建的自变量调用功能   功能。

这意味着您传递给新函数的任何参数都将传递给包装的func

在您的情况下:

  1. sendSegmentData具有sendEnhancedTrackEvent参数
  2. 调用sendSegmentData时,它将调用once(() => { pageTwoSegmentEvent(sendEnhancedTrackEvent); });,这将创建一个新函数。新函数不会返回或调用。

要创建sendSegmentData,请直接在once上调用pageTwoSegmentEvent。这将返回一个新函数,该函数会将get中的所有参数传递给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>

答案 1 :(得分:0)

_。once返回您需要调用的函数。无论您调用此函数多少次,它都只会被调用一次。

假设once_.once的别名,请尝试将其更改为:

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

...

// somewhere else call it
sendSegmentData(theSegmentedData);