我试图将一个变量传递到一个回调函数中,该回调函数是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函数中的变量,并且正在获取一个包含所有数据的对象。
答案 0 :(得分:1)
首先,您在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'
这称为“阴影”顺便说一句(wiki)。