所以我正在调用一个函数,该函数调用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传递它的方法从未被调用过。有谁知道该怎么做?
答案 0 :(得分:1)
_.once()
方法使用一个函数(func),并返回一个函数,该函数一次调用包装的函数(func)。根据文档:
使用此绑定和创建的自变量调用功能 功能。
这意味着您传递给新函数的任何参数都将传递给包装的func
。
在您的情况下:
sendSegmentData
具有sendEnhancedTrackEvent
参数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);