我正在尝试将变量传递到回调函数中,该函数是Azure Maps的事件侦听器的一部分,但是一旦我在另一个函数中进行控制台登录,该变量就会显示为“未定义”。不知道我在做什么错。我是否以错误的方式将变量传递给了回调函数?
loadData = () => {
let dataSource = new window.atlas.source.DataSource('map', {
cluster: true,
clusterRadius: clusterRadiusLevel,
clusterMaxZoom: maxClusterZoomLevel
});
maps.event.add('click', layer, (e,dataSource) => this.clickedCluster(e,dataSource)
}
clickedCluster = (e,dataSource) => {
console.log(dataSource)
}
肯定还有更多的loadData函数,但提供了我正在尝试执行的操作的足够信息。clickedCluster中的console.log保持未定义状态。我知道它不是未定义的,因为我在console中记录了loadData函数中的变量,并且正在获取包含所有数据的对象。
首先,您缺少在线的结束语maps.event...
。
其次,不要dataSource
在同一行中将第二个参数包含在您的匿名箭头函数中:
let loadData = () => {
let dataSource = new window.atlas.source.DataSource('map', {
cluster: true,
clusterRadius: clusterRadiusLevel,
clusterMaxZoom: maxClusterZoomLevel
});
maps.event.add('click', layer, e => this.clickedCluster(e, dataSource));
};
let clickedCluster = (e, dataSource) => {
console.log(dataSource)
};
突出说明为什么这是正确的,请看这个简单的示例
let callback = a => console.log('callback', a);
let x = 'hello';
let caller1 = x => callback(x);
let caller2 = () => callback(x);
caller1(); // undefined
caller2(); // 'hello'
这称为“阴影”顺便说一句(维基)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句