好奇为什么map.on();不起作用

我有一个带有GET方法和MySQL数据库的后端,在客户端的超文本标记语言文件中,我编写了生成地图的代码,并在地图上添加了一些标记和行。最初,我有以下代码来启动我的地图和标记:

代码语言:javascript复制 var map = new mapboxgl.Map({

container: 'map',

style: 'mapbox://styles/mapbox/streets-v11',

center: [12.550343, 55.665957],

zoom: 2

});代码语言:javascript复制 async function getapi(url){

const response = await fetch(url);

var data = await response.json();

return data;

}

getapi(api_url).then(data => {show(data);});

function show(data){

/*

* This is the only function to manipulate with all airlines

*/

for (r in data){

dep_lat.push(data[r]['DepLat']);

arr_lat.push(data[r]['ArrLat']);

dep_lng.push(data[r]['DepLng']);

arr_lng.push(data[r]['ArrLng']);

}

/*

* Load all airlines on the map initially, without the point marker

*/

map.on('load', function () {

for (var i = 0; i < dep_lat.length; i++){

//console.log("init map test");

map.addSource('route'+String(i),{

'type': 'geojson',

'data': {

'type': 'Feature',

'properties': {},

'geometry': {

'type': 'LineString',

'coordinates': [

[dep_lng[i],dep_lat[i]],

[arr_lng[i],arr_lat[i]]

]

}

}

});

map.addLayer({

'id': 'route'+String(i),

'type': 'line',

'source': 'route'+String(i),

'layout': {

'line-join': 'round',

'line-cap': 'round'

},

'paint': {

'line-color': '#C0C',

'line-width': 3

}

});

}

});

for (var i = 0; i < dep_lat.length; i++){

let deplng = dep_lng[i];

let deplat = dep_lat[i];

let arrlng = arr_lng[i];

let arrlat = arr_lat[i];

new ClickableMarker({color: 'red'})

.setLngLat([deplng,deplat])

.onClick(() => {

alert(show_route(deplng, deplat));

})

.addTo(map);

new ClickableMarker({color: 'red'})

.setLngLat([arrlng,arrlat])

.onClick(() => {

alert(show_route(arrlng, arrlat));

})

.addTo(map);

}

}我已经为mapboxgl.Marker编写了一个扩展来处理点击事件,它工作得很好,(附加的扩展类):

代码语言:javascript复制 class ClickableMarker extends mapboxgl.Marker{

onClick(handleClick){

this._handleClick = handleClick;

return this;

}

_onMapClick(e){

const targetElement = e.originalEvent.target;

const element = this._element;

if (this._handleClick && (targetElement===element || element.contains((targetElement)))){

this._handleClick();

}

}

};但是,在show_route()函数(在onClick()中调用)中,我有以下代码,并且只获得了第二个控制台日志,map.on()中的“测试”没有显示出来。我可以问一下原因和我如何修复它,以便console.log(“测试”)可以运行。谢谢。