Ich habe ein Projekt, wo ich eine Funktion schreiben muss, um mehrere Dinge nacheinander zu berechnen und dann die Ergebnisse in eine SQL DB schreiben. Leider muss ich dies mehr als 40.000 Mal wiederholen. Ich benutze node.js und verspricht, dies zu erreichen, aber die Speicherauslastung geht auf fast 2 GB oft das Programm stirbt gerade nach 10.000 oder so Berechnungen. Ich entwickelte meine eigene einheimische proveyEach-Funktion, die ein Array-Elemente im Sequantial nimmt und es mit Versprechen kettet.Verkettung einer Menge (> 40.000) native Versprechungen zusammen frisst zu viel Speicher
Was mache ich hier falsch ?:
function promiseEach(array,promiseFn){
return new Promise(function(resolve,reject){
try {
var promiseArray = [];
var json = { array: array, counter: 0 }
for (var i = 0; i < array.length; i++) {
promiseArray.push(promiseFn)
}
promiseArray.reduce(function(preFn,curFn,index,pArray){
return preFn
.then(function(z){ return json.array[json.counter++] })
.then(curFn)
},
Promise.resolve(json.array[json.counter]))
.then(resolve,reject)
}catch(err){
console.log("promiseEach ERROR:");
reject(err)
}
})
}
40.000 ist viel ist es nicht. Ich würde anfangen zu prüfen, wie Sie diese Zahl zuerst reduzieren könnten –
Was ist, wenn Sie '--max-old-space-size' zu etwas in der Nähe von 500MB angeben? – zerkms
Vielleicht nicht das Problem, aber achten Sie auf die [explizite Versprechen Konstruktion Antipattern] (http://stackoverflow.com/questions/23803743/what-ist-the-explicit-promise-construction-antipattern-and-how-do- ich vermeide es). – JLRishe