Ich habe eine rekursive Funktion in Node.js, die von dem Rückgabewert seiner rekursiven Aufrufe abhängt, die an verschiedenen Stellen auftreten können. Es funktioniert für kleinere Testfälle, aber sobald ich zu meinen größeren Datensätzen komme, vermasselt Asynchronität es.Node.js Asynchrone rekursive Callbacks
Ich habe versucht, einen Rückruf verwenden und prüfen, ob die Menge an Iterationen trifft es die Länge des Datensatzes übereinstimmt, aber es stoppt, bevor es alle aus irgendeinem Grund Iterieren durch (möglicherweise Speicherproblem?)
Hier der allgemeine Ablauf des Codes, so weit, mit sporadischen Anrufen Rückruf:
function recursiveCall(value, array, callback) {
callback(value)
if (/*base case*/) {
return value;
}
for (var i = 0; i < array.length; i++) {
if (/*conditional*/) {
var x = /* work + */ value
return recursiveCall(x, array, callback);
}
.
.
.
if (/*conditional*/) {
var x = /* work + */ value
return recursiveCall(x, array, callback);
}
}
}
var iters = 0;
var finalValue = recursiveCall(initialValue, array, function(value) {
if (++iters >= array.length)
console.log(value);
});
ich verstehe, dass der Wert der Endwert nicht definiert sein, aber es ist ein Teil der ursprünglichen Implementierung, die mit dem kleineren Testfall gearbeitet.
Ich muss nur in der Lage sein, den Wert am Ende zu protokollieren.
Vielen Dank für die Hilfe! Es wird sehr geschätzt!
Welcher Teil davon ist asynchron? Es scheint völlig synchron zu sein. – McMath
Ihr Rückruf ist nicht rekursiv. Es ist nur eine anonyme Funktion, die bei jeder rekursiven Iteration von 'rekursivem Ruf' aufgerufen wird. Ihre rekursiven Aufrufe scheinen in Endposition zu sein. Ich weiß nicht, ob node.js oder die zugrunde liegende Chrome-Engine bereits TCO unterstützt. Vielleicht ist es ein Stapelüberlauf? – ftor