Async und Rekursion in nodejs
Beginnend mit express und Mungo ich oft tun müssen, um einige batch-Operationen auf collections.
Allerdings ist es in der Regel beinhaltet Rückrufe, die einen Schmerz gegeben, wie die Parallelität wird codiert in nodejs.
also im Grunde
//given a collection C
var i = 0;
var doRecursive = function(i){
if(i<C.length){
C[i].callAsync(err,result){
i=+1;
return doRecursive(i);
}
}else{
return done();
}
}
doRecursive(i);
Nun ich kann mich nicht erinnern, was ist die max Stapel, bevor ich eine stackover-flow mit Knoten , aber ich denke mit 10 000 Elementen , die es nicht tun.
Ich Frage mich, ob es gibt andere Möglichkeiten, damit umzugehen, wenn ja , was sind Sie?
Dank
- Gut, asynchrone Funktionen werden Ihnen bei der stack-überlauf, da der Rückruf in einem anderen call-stack. Aber, durch ausbrechen in einen anderen stack, macht es
return
eher nutzlos. - werfen Sie einen Blick auf async
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das Ziel ist, zum Durchlaufen einer Sammlung asynchron, es gibt zahlreiche Ablaufsteuerung Bibliotheken zur Verfügung.
Ein gutes Beispiel ist
async
und seinereduzieren
- Funktion:Hinweis: Es ist nicht ganz klar, welchen Wert Sie wollte von
doRecursion
, so dass diese nur verwendet, darüber hinaus für ein Beispiel.ich denke, man kann einfach sich selbst iterieren, anstatt der wahren Rekursion, da bist du nicht die Bohrung in eine Tiefe Objekt:
diese nicht zu einem hohen Stapel, wenn die code-Funktionen als gekennzeichnet.
ich lokalisierte C, so dass Sie schneller ausgeführt und ist potentiell wieder verwendbar zu anderen Sammlungen.
das Muster macht es auch leicht zu verschieben, es für lang andauernde Operationen, nur durch eine änderung der
zu