项目场景:
刚用vue完成了几个小项目,在其中一个项目处理ajax请求传参的时候遇到一个问题:在初始化(created)的时候我各种获取不同数据的方法是按照顺序排列进行请求的,其中有部分请求的传参需要从另外的请求中获取,于是我选择将获取传参的方法排在前面优先执行,以便后面的请求能准确得到参数。
问题描述:
问题来了:不论怎么在(created)优先执行获取传参的方法,我设置的全局变量就是获取不到整个方法返回的结果,但是这个获取传参的方法是被执行了,在该方法执行成功后能在success里面得到准确的结果,但这个结果就是没有传递给我设置的全局变量。
原因分析:
个人认为:vue里面的各种钩子函数都有对应的生命周期,在初始化(created)的时候里面放了多个方法的时候,差不多是同时执行的里面的方法,并且这里用的是异步请求,而异步请求的一个特点就是在这个请求还没完成的时候就可以进行下一个请求,而所有的请求是需要时间来响应的,特别是在某些情况比如网络延迟、数据量过大或者其他情况下时间会需要的更多,所以,导致我设置的全局变量是没法接收相关数据的,只能读取设置的默认值null。
解决方案:
将两个方法处理成同步请求,在我执行完获取传参的方法后再执行另外一个方法。虽然这种方法在某些情况下看着容易发生类似线路堵塞的情况,并且在整个页面代码上看着有些冗长,但这种方式能避免读错数据,也能避免很多死锁的情况。