我递归调用一个函数,它的回调函数done()函数被无限调用,我不知道为什么。
当我记录i时,它达到数据的长度,然后满足条件并且它停止,但是无限调用done函数。 done函数不是递归的;为什么不止一次被召唤?当增量器等于数据长度并且定义了nTwo时,如何只调用一次?
我认为这可能是因为i的预增量,但是我需要它,否则我得到一个RangeError,超出最大堆栈。
function train(i, data, n, nTwo, func){
console.log(i, i===data.length);
if(i===data.length && nTwo===undefined) func();
else if(i<data.length) (new Trainer(n)).workerTrain([data[i]], train(++i, trainingSet, l, y));
else done();
}
function done(){
console.log('first set of workers done');
saveAs(new Blob([JSON.stringify(l.toJSON())], {type: "application/json"}), "l.json");
train(0, yonTraining, y, undefined, finalTrainingCallback);
}
答案 0 :(得分:0)
显然,函数train
正在调用函数done
,该函数再次调用函数train
。然后函数train
递增索引i
,直到其值大于data.length,再次调用done
函数