角度超时调用功能无延迟

时间:2017-07-11 22:21:14

标签: angularjs

在以下代码段中,进度调用将在10秒延迟时间内连续触发。请让我知道我哪里出错了

        ctrl.progress =function (fileName){

            if(ctrl.status < 100){
                ctrl.timer = $timeout(function(fileName){

                    LookUpValueService.getImportStatus(fileName).
                    then(function(value){
                        ctrl.status = value; 
                        ctrl.progress(fileName);
                    });
                    //ctrl.status = ctrl.status + 1;                

                }(fileName),5000);
            }
            else{
                $timeout.cancel(ctrl.timer);
            }
        }; ctrl.progress("test.txt");

1 个答案:

答案 0 :(得分:2)

$timeout()的第一个参数必须是函数本身,而不是调用函数的结果。

在你的情况下,ctrl.progress()没有返回一个函数,它返回undefined,所以当你有:

ctrl.timer = $timeout(ctrl.progress(fileName), 10000);

发生的事情是ctrl.progress(fileName)立即被调用,返回未定义,然后告诉$timeout()在执行undefined之前等待10秒。

更改该行以改为使用函数,它将起作用:

ctrl.timer = $timeout(() => ctrl.progress(fileName), 10000);

(或者如果不使用ES6 / 2015 / TypeScript:ctrl.timer = $timeout(function () { ctrl.progress(fileName) }, 10000);