先看代码: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

解决方案 »

  1.   

    function TestFn() {
        var i = 0;
        var id = setInterval(function () {
            if (i == 3) {            clearInterval(id);            return i;        }
            else {
                i++;
            }    }, 500);
        return id;
    }
      

  2.   


    把i放外面不行哦,你可以调试一下,获得的i值是0,
    定时器不就是相当于异步的作用吗?每隔一定时间去执行一下,我想要的是i为3的时候才返回
      

  3.   

    按照你的那个办法获取不到setInterval执行完后正确的i值的,setInterval不会挂起程序的执行。
    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();
      

  4.   

    谢谢楼上的回答,你这个办法那应该跟TestFn内部是差不多一个意思,外部方法就是先判断有没有执行完
      

  5.   


    最后的解决方案就是运用委托,接收异步后需要调用的方法。
    跟jQ框架一样,在success里写你异步后需要执行的自己的函数