TW实习日记:第13天

  昨天困扰的问题终于解决了。因为是百度地图api提供的函数,所以这个解决办法并不适用于所有异步请求,仅仅针对百度地图api的调用接口函数和回调函数。有两种解决方法可以解决百度地图api中常出现的请求回调的顺序问题,背景:方法A用于搜索获得两点间导航路线的点集合,方法B用于获得数据,调用方法B时将处理点集合的方法C放入参数列表。需要循环n次获得n+1组两点之间的点集合,因为种种原因获取的点集合和搜索顺序并不一致。框架是vue.js。

  解决方案1:可以使用一个定时器来定时发送,并且设置一个标志位,只有标志位为真才进行请求。

  切记在回调函数内将标志位设置为true!

  切记在回调函数内将标志位设置为true!

  切记在回调函数内将标志位设置为true!

  以下是调用函数的伪代码,回调函数就不写了:

let self = this;
let i = 0;
let flag = true;
let interval =  window.setInterval(function () {
          if(flag){//当标志位为真
            if(i > self.points.length - 1){//限定条件
              window.clearInterval(interval);//清除定时器
              return ;
            }
            //以下为需要定时做的请求
            let point0 = self.points[i];
            let point1 = self.points[i+1];
            let m = new BMap.Marker(point0);
            self.map.addOverlay(m);
            driving.search(point0, point1);
          }
          flag = false;//修改标志位
        },200);//设置发送间隔        

  解决方案2:请求代码块只进行一次,在回调函数结尾处进行请求,同时计数,达到限定条件则停止发送请求。代码就不贴了,相信应该明白了。

  方案1和方案2本质是一样的,通过一种方式得知回调函数被执行,再发送请求,区别就在于实现方式,一个是直接让回调函数来发送请求,一个是通过定时器。没想到昨天怎么想也想不出来的问题今天竟然搞明白了,因为百度地图api的特殊性,导致这两个方案不具有普适性,如果以后遇到更难得需求,再说吧,从今天开始,日常烧香拜佛写后端!

  挖坑清单:

  1. Vue缓存机制、生命周期和钩子函数
  2. 使用自用组件编写页面
  3. SSM框架搭建、整合流程(正在做)
  4. git学习与常用命令记录(最后的整理)
  5. 看书和复习

Terence Xie

2018.8.1 周三 20:06

猜你喜欢

转载自www.cnblogs.com/WaterApe/p/practiceInTW_13.html