关于异步有点问题
来源:3-4 获取当前行政区
学习plus
2020-10-13 18:04:34
视频中说获取行政区肯定是异步的,首先地图得加载出来
就是这里有点疑惑,既然获取行政区必须要地图加载完毕,那不应该是同步吗?
一步步来,异步的话,难道不会发生获取行政区已经执行,但是地图还来不及加载的问题吗
3回答
同学你好,问题解答如下:
1. 同步就是一次只能做一件事,即先做A、再做B、再做C,如果A发生了错误,那么B和C就无法执行,程序就会发生阻塞,如果A的时间很长,那么程序执行完的时间就会比较长。异步则是,可以同时做A、B、C三件事,这样就打大大减少了程序执行的时间,但是也会面临一个问题,即A、B、C三者的执行顺序不好控制。
2. 对应到高德地图中,map.getCenter采取的是异步加载的方式,目的就是减少代码的执行时间,也可以采用同步的方式,但是代码执行速度慢,用户体验会不好。而采用异步后,就要注意代码的执行顺序问题,为了避免出现同学所担心的问题,map.getCenter方法内部,对地图的状态做了监听,即监测到地图加载完成后,再获取行政区域数据,最后再执行回调函数中的代码,即下图中选中的部分,就是回调函数:

这样即提升了执行速度,又解决了顺序问题。
3. 下图红线处的理解不太准确:

异步处理完后,回调函数中的代码是在异步程序中主动调用执行的,以getCity为例,它是如下形式:

如果我的回答帮到了你,望采纳,祝学习愉快!
学习plus
提问者
2020-10-13
是不是事先封装好一个方法,参数为一个回调函数。
这个方法不是放在主线程里的,但是是申明好放在任务队列,只有在主线程需要调用的时候,才会通过回调函数调用,这种就叫做异步?
如果不对的话麻烦老师指正下,可以的话麻烦给了例子,不大理解
学习plus
提问者
2020-10-13
感觉还是有点无法理解同步异步,老师能稍微详细地解释下这个嘛?
相似问题