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

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

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

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

3 回答

?
倚天杖

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

你可以把获取地理位置的封装成一个方法,返回一个promise对象,然后在外部 解析的地址的方法用asny,await去取获取地理位置 的方法,这样就可以实现同步了。

查看完整回答
反对 回复 2019-04-04
?
慕慕森

TA贡献1856条经验 获得超17个赞

简单来说这样做(以下是伪代码):


async getMyAndTargetPosition() {

  const target = await getPosition(target);

  const me = await getPosition(me);

  return getPath(target, me);

}

getMyAndTargetPosition()

  .then(path => {

    // path

  });


查看完整回答
反对 回复 2019-04-04
  • 3 回答
  • 0 关注
  • 549 浏览
慕课专栏
更多

添加回答

举报

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