为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用async await或者promise代替定时器呢?

如何使用async await或者promise代替定时器呢?

慕尼黑8549860 2019-05-20 18:29:30
使用的百度地图。必须先使用百度地图获取目标位置和使用百度地图获取目标位置,然后在通过百度地图的获取我和目标的位置。由于异步的原因,所以我使用了定时器解决,不过性能肯定不好,如何使用asyncawait或者promise代替定时器呢?代码片段如下://获取目标位置varmyGeo=newBMap.Geocoder();//根据中地址名查经纬度myGeo.getPoint(scope.targetname,function(point){if(point){scope.target=point;}else{toast("您选择地址没有解析到结果!");}},scope.cityname);//获取我的位置vargeolocation=newBMap.Geolocation();geolocation.getCurrentPosition(function(r){if(this.getStatus()==BMAP_STATUS_SUCCESS){//alert('您的位置:'+r.point.lng+','+r.point.lat);scope.myadd=newBMap.Point(r.point.lng,r.point.lat);//console.log(scope.myadd,"我的位置")}else{alert("定位失败");}},{enableHighAccuracy:true})//获取我和目标的位置setTimeout(function(){if(scope.myadd!=""&&scope.target!=""){varmap=newBMap.Map("l-map");map.centerAndZoom(newBMap.Point(scope.target.lng,scope.target.lat),11);varwalking=newBMap.WalkingRoute(map,{renderOptions:{map:map,panel:"r-result",autoViewport:true}});walking.search(scope.myadd,scope.target);}},1000);
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

body,html,#allmap{width:100%;height:100%;overflow:hidden;margin:0;font-family:"微软雅黑";}
地址解析
//将地址解析结果显示在地图上,并调整地图视野
//
varmyGeo=newBMap.Geocoder();
letpromiseTarget=newPromise((resolve)=>{
myGeo.getPoint("霍营",function(point){
if(point){
resolve(point)
}else{
alert("您选择地址没有解析到结果!");
}
},"北京市");
})
vargeolocation=newBMap.Geolocation();
letpromiseLocation=newPromise((resolve)=>{
geolocation.getCurrentPosition(function(r){
if(this.getStatus()==BMAP_STATUS_SUCCESS){
resolve(r.point)
}
else{
alert('failed'+this.getStatus());
}
},{enableHighAccuracy:true})
})
Promise.all([promiseTarget,promiseLocation]).then(([target,location])=>{
console.log(target,location,5)
//百度地图API功能
varmap=newBMap.Map("allmap");
map.centerAndZoom("北京",12);//初始化地图,设置城市和地图级别。
alert('从大渡口区到江北区的距离是:'+(map.getDistance(target,location)).toFixed(2)+'米。');//获取两点距离,保留小数点后两位
varpolyline=newBMap.Polyline([target,location],{strokeColor:"blue",strokeWeight:6,strokeOpacity:0.5});//定义折线
map.addOverlay(polyline);//添加折线到地图上
})
                            
查看完整回答
反对 回复 2019-05-20
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

你可以把获取地理位置的封装成一个方法,返回一个promise对象,然后在外部解析的地址的方法用asny,await去取获取地理位置的方法,这样就可以实现同步了。
                            
查看完整回答
反对 回复 2019-05-20
  • 2 回答
  • 0 关注
  • 1069 浏览
慕课专栏
更多

添加回答

了解更多

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信