这是我的递归函数:
function importTEI(index,data,header){
if (index == data.length){return}
var tei = new dhis2API.trackedEntityInstance();
tei.excelImportPopulator(header,data[index]);
tei.POST(requestCallback,requestCallback,index);
function requestCallback(response){
notificationCallback(response);
setTimeout(function(){
importTEI(response.importStat.index+1,importData,header);
},0);
}
}
使用 setTimeout 在函数中调用函数 importTEI 。在没有setTimeout的情况下调用时,在几次请求之后出现此错误 -
Uncaught RangeError: Maximum call stack size exceeded
但是使用setTimeout它会永远运行....为什么会这样?在setTimeout中发生了什么特别的事情?它不再是递归呼叫吗?
任何提示都表示赞赏。日Thnx。
答案 0 :(得分:4)
它不再是递归通话。 setTimeout是将来的回调,并且该调用将位于堆栈顶部"#34;。对函数的现有调用会设置此回调,然后完成其执行,从而导致零递归。
答案 1 :(得分:0)
setTimeout function works only once. Look into your code. Inside the startTime function , you are calling the same function again in 0 ms. if you want it to repeat for sometime, use setInterval instead. This function returns a id using which you can stop it whenever you want.
refer this answer: Why does the setTimeout function execute forever?