javascript - 如何将 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 传递它的方式永远不会被调用。有谁知道如何做到这一点?
解决方案
该_.once()
方法接受一个函数(func),并返回一个调用包装函数(func)的函数。根据文档:
使用 this 绑定和创建函数的参数调用 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>
推荐阅读
- python - 尝试在 python 中使用 hyperopt 调整最近邻居时出错
- powershell - Get-InstalledModule 和 Get-Module -ListAvailable 有什么区别?
- r - 基于 R 中的 varimp 自动选择变量
- c# - 使用 jquery 刷新局部视图
- r - R中data.frames列表的子集
- python - Wagtail 文档:大文件大小 (>2GB) 上传失败
- c - 如何修复非标量类型转换错误
- node.js - 无法在路由 Nodejs Express Typescript 中调用方法控制器内的方法
- c++ - 从 QListWidget 和 QTableWidget 获取点击的项目
- php - 如何使用 Laravel 修复上传图像到 s3