猿问

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

使用的百度地图。必须先使用百度地图获取目标位置和使用百度地图获取目标位置,然后在通过百度地图的获取我和目标的位置。由于异步的原因,所以我使用了定时器解决,不过性能肯定不好,如何使用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);


慕森王
浏览 550回答 3
3回答

倚天杖

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

慕慕森

简单来说这样做(以下是伪代码):async getMyAndTargetPosition() {  const target = await getPosition(target);  const me = await getPosition(me);  return getPath(target, me);}getMyAndTargetPosition()  .then(path => {    // path  });
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答