关于异步有点问题

来源:3-4 获取当前行政区

学习plus

2020-10-13 18:04:34

视频中说获取行政区肯定是异步的,首先地图得加载出来

就是这里有点疑惑,既然获取行政区必须要地图加载完毕,那不应该是同步吗?

一步步来,异步的话,难道不会发生获取行政区已经执行,但是地图还来不及加载的问题吗

写回答

3回答

好帮手慕久久

2020-10-13

同学你好,问题解答如下:

1. 同步就是一次只能做一件事,即先做A、再做B、再做C,如果A发生了错误,那么B和C就无法执行,程序就会发生阻塞,如果A的时间很长,那么程序执行完的时间就会比较长。异步则是,可以同时做A、B、C三件事,这样就打大大减少了程序执行的时间,但是也会面临一个问题,即A、B、C三者的执行顺序不好控制。

2. 对应到高德地图中,map.getCenter采取的是异步加载的方式,目的就是减少代码的执行时间,也可以采用同步的方式,但是代码执行速度慢,用户体验会不好。而采用异步后,就要注意代码的执行顺序问题,为了避免出现同学所担心的问题,map.getCenter方法内部,对地图的状态做了监听,即监测到地图加载完成后,再获取行政区域数据,最后再执行回调函数中的代码,即下图中选中的部分,就是回调函数:

http://img.mukewang.com/climg/5f858379091d167104750123.jpg

这样即提升了执行速度,又解决了顺序问题。

3. 下图红线处的理解不太准确:

http://img.mukewang.com/climg/5f858524097f8d9407200094.jpg

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

http://img.mukewang.com/climg/5f85861b09083bce07070243.jpg

如果我的回答帮到了你,望采纳,祝学习愉快!

0

学习plus

提问者

2020-10-13

是不是事先封装好一个方法,参数为一个回调函数。

这个方法不是放在主线程里的,但是是申明好放在任务队列,只有在主线程需要调用的时候,才会通过回调函数调用,这种就叫做异步?

如果不对的话麻烦老师指正下,可以的话麻烦给了例子,不大理解

0

学习plus

提问者

2020-10-13

感觉还是有点无法理解同步异步,老师能稍微详细地解释下这个嘛?

0

0 学习 · 6815 问题

查看课程