0 前言
在GIS开发中,尝尝有一种需求:判断一个图形是否绘制结束,因为是画图形是异步事件,因此采用Promise+async方式解决;
1 不使用Promise+async时,问题如下:
A.js中有封装画多边形的代码:
const drawPolygon = function (map) {
...
map.on('click', onClick); //点击地图
map.on('dblclick', onDoubleClick); //双击完成
map.on('mousemove', onMove)
function onClick(e) {
...
}
function onMove(e) {
...
}
function onDoubleClick(e) {
...
L.polygon([points]).addTo(map)
return points
}
}
B.vue中使用A封装的画多边形事件,因为是异步事件,得到的值为空:
drawPoly() {
const pointsArr = mapUtils.drawPolygon(state.map);
console.log(pointsArr);//null
},
2 采用Promise+async 可以解决此问题
A.js修改如下:
const drawPolygon = function (map) {
return new Promise(function(resolve){
...
map.on('click', onClick); //点击地图
map.on('dblclick', onDoubleClick); //双击完成
map.on('mousemove', onMove)
function onClick(e) {
...
}
function onMove(e) {
...
}
function onDoubleClick(e) {
...
L.polygon([points]).addTo(map)
resolve(points)
}
}
)
}
B.vue修改如下:
async drawPoly() {
const pointsArr = await mapUtils.drawPolygon(state.map);
console.log(pointsArr);//[[125.23,33.44],[122.21,35.23]]
},