实际编程中,我们经常需要解决关于controler层代码的执行顺序问题。例如,我要发送一个请求获得一个参数后才能执行下面的代码,由于发送请求是一个异步的操作,在发送后并不会等待参数回来后才执行下面的代码,而我们经常碰到下面的代码需要使用请求后的参数,这种情况就需要使用到自调用函数循环和延迟操作。
var self = this;
var flag = false;
var promise = createVmSer.query(); //假设为请求的接口
promise.then(function(data){
self.lode = data.lode; //假设我们需要使用lode这个参数
...
flag = true; //当flag为true时,表示已经查询到lode这个参数了
});
function loding(){
var status = self.lode;
...
reloded(status);
}
if(!flag){
(function waitlode(){
//按照实际情况填写条件,主要是校验lode是否真的有值,如果没有就延迟一秒再调用waitlode(),如果有就执行loding()并且取消延迟方法的执行,结束循环
var tem = null;
if(self.lode){
loding();
tem != null && clearTimeout(tem);
}else{
tem = setTimeout(waitlode , 1000);
}
}())
}else{
loding();
}