我的节点应用程序的 CPU 使用率正在逐渐增加。我发现内存泄漏正在发生。通过 AppDynamics,我发现在processImmediate调用树下有大量保留的内存随着时间的推移而不断增加。当我深入研究时,我发现问题出在setPromises函数上。
我想听听你对我一直在使用的 Promise 的一种特殊用法的看法。循环的承诺。下面是这种用法的示例函数结构。
var dataArray = []; //list of jsons
var Promise = require('node-promise').Promise;
function doSomething(){
try{
var promises = [];
//create function promises and push
for(var i in dataArray){
var usage = {};
usage["user"] = dataArray[i].user;
promises.push((function(ob){
var log = extend({},ob);
return executeFunction(log)}).bind(null,usage));
}
//loop and execute
var respArray = [];
return (promises.reduce(function(previous , current , index , array){
try{
return previous.then(function(resp){
if(resp != null)
respArray.push(resp);
if(promises.indexOf(current)==promises.length -1){
return current();
}
else{
return current();
}
});
}catch(ex){
throw { ex : ex.stack};
}
},delay())).then(function(){
return data;
});
}
catch(ex){
console.log(ex,ex.stack);
throw { ex : ex.stack};
}
}
function logTemplate(log){
return models.Users.create(log).then(function(resp){
return resp;
},function(err){
return err;
});
}
一个小时内的堆增长如下图所示
上述函数必须对数据数组中的对象进行同步更新。这有内存泄漏的可能性吗?