情景:vue框架中通常在created钩子函数里执行访问数据库的方法,然后返回数据给前端,前端data中定义全局变量接收数据

但是如果你在created中执行了好几个访问数据库的函数,如果对他们的执行顺序是有要求的,那么哪个会先返回,哪个会后返回呢

并不是谁在前谁就先返回,如果你这样想,并且在后执行的函数中对先执行的函数返回的数据进行操作,经常会报错,提示某些属性不存在,或未定义

原因:这是因为js中默认执行网络请求是异步的,他们会按顺序发出请求之后就不管了,谁先返回是不确定的,这样在加载数据的时候不会因为某个网络请求慢,而在一直等待那个请求,导致其他请求阻塞,效率,体验很差

解决方法:
如果一次加载页面需要执行多个网络请求,并且对返回的数据顺序是有要求的,就用.then()函数,当这个函数执行完后再执行下个函数

computed是在DOM执行完成后立马执行(如:赋值)
created执行时挂载阶段还没有开始,模版还没有渲染成html,所以无法获取元素。created钩子函数主要用来初始化数据。
mounted钩子函数一般用来向后端发起请求,拿到数据后做一些业务处理。该函数在模版渲染完成后才被调用。DOM操作一般是在mounted钩子函数中进行。
methods方法有一定的触发条件,如click等。
watch用于检测vue实例上数据的变动
默认加载的时候先computed再watch,不执行methods;等触发某一事件后,则是:先methods再watch。

建议: 所有方法都应该在methods里定义,在mounted或created里面使用this调用,用这种方法实现初始化。

Logo

前往低代码交流专区

更多推荐