首页 > 解决方案 > 如何将 arg 传递给 lodash 的 once 函数中的函数?

问题描述

所以我正在调用一个调用 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 传递它的方式永远不会被调用。有谁知道如何做到这一点?

标签: javascriptlodash

解决方案


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

使用 this 绑定和创建函数的参数调用 func。

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

在你的情况下:

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

要创建,请直接sendSegmentData调用oncepageTwoSegmentEvent这将返回一个新函数,该函数会将 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>


推荐阅读