在以下代码段中,进度调用将在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");
答案 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);
)