【问题标题】:Passing a variable into a callback function but it's coming up as 'undefined'将变量传递给回调函数,但它以“未定义”的形式出现
【发布时间】:2019-05-01 20:34:00
【问题描述】:

我正在尝试将一个变量传递给一个回调函数,该函数是 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 不断返回未定义。我知道它不是未定义的,因为我在控制台中记录了 loadData 函数中的变量,并且我得到了一个包含所有数据的对象。

【问题讨论】:

    标签: javascript reactjs azure maps azure-maps


    【解决方案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)。

    【讨论】:

    • 您可能要注意,回调参数不是由我们的代码决定的,因为我们不是运行回调的人。这是我们无法控制的。因此,您必须查看文档以了解回调函数将接受哪些参数并仅使用这些参数。
    • 谢谢!那行得通,我一直认为必须在将变量传递给回调之前将变量作为箭头函数中的参数调用。我今天学到了一些新东西。
    • @Rchan 如果上述回复帮助/解决了您的问题,请接受回复作为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多