先看代码:function qq() {
var s = TestFn();
}function TestFn() {
var i = 0;
var id = setInterval(function () {
if (i == 3) { clearInterval(id); return i; }
else {
i++;
} }, 500);
}问题描述:
下面这个TestFn函数中有一个定时器(相当于一个异步函数),TestFn中当i==3时停止计时并返回i,
外面方法qq调用TestFn方法后,我想直接得到i的值。
现在的问题是因为定时器异步的,所以qq方法调用TestFn后(var s = TestFn();),这里的s是undefined,如何获得i???
我就想在外面方法中获得i
var s = TestFn();
}function TestFn() {
var i = 0;
var id = setInterval(function () {
if (i == 3) { clearInterval(id); return i; }
else {
i++;
} }, 500);
}问题描述:
下面这个TestFn函数中有一个定时器(相当于一个异步函数),TestFn中当i==3时停止计时并返回i,
外面方法qq调用TestFn方法后,我想直接得到i的值。
现在的问题是因为定时器异步的,所以qq方法调用TestFn后(var s = TestFn();),这里的s是undefined,如何获得i???
我就想在外面方法中获得i
var i = 0;
var id = setInterval(function () {
if (i == 3) { clearInterval(id); return i; }
else {
i++;
} }, 500);
return id;
}
把i放外面不行哦,你可以调试一下,获得的i值是0,
定时器不就是相当于异步的作用吗?每隔一定时间去执行一下,我想要的是i为3的时候才返回
var finish=false,i=0;//i需要变为全局变量function qq(isckTimer){
if(!isckTimer)TestFn();
else if(finish)alert(i);
if(!isckTimer||!finish)setTimeout('qq(true)',100);//非检查状态或者未完成setInterval
}function TestFn() {
var id = setInterval(function () {
if (i == 3) { clearInterval(id); finish=true;//================ }
else {
i++;
} }, 500);
}
qq();
最后的解决方案就是运用委托,接收异步后需要调用的方法。
跟jQ框架一样,在success里写你异步后需要执行的自己的函数