在开发中我们会遇到很多不可思议的问题!可能前端对于线程理解的不是很深入,我先给大家讲一下什么是线程。
线程是进程内执行代码基本单位,那么进程是什么呢?指程序被OS调入内存,分配执行空间,随时供CPU调度执行,也就是我们电脑所开启的很多进程,这样是不是更清楚了呢?(这里就不深入讲了,以后有机会给大家讲解一下线程与进程的关系,其实我们前端webworker也是html5,新加线程的一个方法。可以了解一下)
最近我们开发一个签到打卡功能,我们是基于一个底层框架,安卓,ios、前端和后端联调(下面称ios和安卓为客户端)都基于这个框架开发,流程是这样的,如果用户点击打卡我要调起客户端插件,获取地理定位信息,然后我拿到这个地理位置信息给后台对比是不是在打卡范围内,如果在范围则成功反之不成功。
流程缕清了吧?写起来特别好写,请看下面代码片段:(其中我们还有判断是不是多个班次跳转页面的流程,这里就不多说了,我们只说这个遇到的问题)
上面代码我红框圈起来的地方就是我调用客户端插件的方法,下面蓝框我做了一个延时,大家是不是觉得很奇怪?我为什么要做延时呢?起初我没有加这个延时,直接调用方法,方法就不生效,甚至走都没有走进去!!,我查了很久,就是不知道怎么回事,因为这也不存在赋值传参的问题啊,就算有赋值问题也应该先这个方法在报错啊?然后就加了一个延时,结果好使了,之后就问了我们技术总监,技术总监说,可能是调用了客户端插件之后,底层框架新开了一个线程,我的方法kq_qdbtns在主线程,然后用setTimeout回归主线程,从而调用到kq_qdbtns的这个方法。
如有不足之处请大家指出,谢谢。