Передача переменной в функцию обратного вызова, но она выглядит как «неопределенная» - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь передать переменную в функцию обратного вызова, которая находится отдельно от прослушивателя событий для карт Azure, но эта переменная выглядит как «неопределенная», как только я укажу переменную в другой функции. Не уверен, что я делаю не так. Я неправильно передаю переменную в функцию обратного вызова?

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, но она предоставила достаточно информации о том, что я пытаюсь сделать. Console.log в clickedCluster продолжает возвращаться неопределенным. Я знаю, что это не неопределенно, потому что я зарегистрировал переменную в функции loadData и получаю объект, содержащий все данные.

1 Ответ

1 голос
/ 01 мая 2019

Во-первых, вам не хватает закрывающей скобки в строке 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 ).

...