settimeout递归循环问题
大概代码就是使用settimeout递归循环不断获取数据,并将所得到的数据不断存到全局变量数组里去,程序在运行到3千次左右,会发生进程卡住不动了,请问这个是什么原因呢?
5 回复
代码放出来看看呢,原则上是不会有这样的问题的
@oyosc 太长了。。。你贴点定时器获取数据的核心代码出来就行了
@hyj1991 ’var processData = function(){
if(numberOfTrades<machineData.length && numberOfTrades+ batchSize<machineData.length){
i++;
console.log("count:", i);
var arry = [];
for(var j = numberOfTrades; j<machineData.length&&j<batchSize+numberOfTrades; j++){
arry.push(machineData[j]);
}
var reward = 0;
var action = brain.forward(arry);
console.log("j=" + j);
if(j < machineData.length){
if(actions[action] == 'BUY'){
numberOfActualTrades += 1;
reward += parseFloat(machineData[j][5] - machineData[j][2]);
}
if(actions[action] == 'SELL'){
numberOfActualTrades += 1;
reward += parseFloat(machineData[j][5] - machineData[j][2]);
}
if(reward>0){
positiveTrades += 1;
}
numberOfTrades += 1;
brain.backward(reward);//此处是机器学习代码
console.log('numberOfTrades is ' + numberOfTrades);
console.log('numberOfActualTrades is ' + numberOfActualTrades);
console.log('positiveTrades is ' + positiveTrades);
}
else{
numberOfTrades = 0;
}
}
setTimeout(processData, 1000);
}
processData();’
多的可能是超出调用栈了,或者发起的异步操作太多阻塞了。 建议你用 async.forever(taskFn, function(error) { }) 来实现你的代码。 taskFn 处理完异步任务以后,用setTimeout 设置一下过一会儿在调用callback