Ich versuche, etwas ziemlich einfach zu tun, es scheint in NodeJS - Ich möchte Funktionen nacheinander ausführen. Alle diese Funktionen haben Rückrufe. Ich habe meinen Code unten sowie die Funktion, die sie für weitere Referenz ausführen, umrissen.Ausführen von Funktionen synchron in NodeJS (MongoDB Operationen/Async.js)
Mein Problem ist, dass die ersten beiden absolut gut funktionieren - eins nach dem anderen, aber die dritte Iteration ignoriert einfach die ersten beiden Funktionen und geht einfach trotzdem. Dies verursacht ein echtes Problem, da mein Programm mit dem Einfügen von Objekten in eine Datenbank arbeitet und doppelte Objekte verursacht.
Das allgemeine Ziel besteht darin, einfach jede Funktion einzeln ausführen zu lassen. Gibt es etwas, was mir hier fehlt? Vielen Dank für deine Hilfe!
Bitte beachten Sie, dass ich in den folgenden Funktionen alle Parameter auf "Args" vereinfacht, um das Lesen zu erleichtern.
Aufruf der Funktionen:
addNewProject(args);
addNewProject(args);
addNewProject(args);
Innerhalb der Funktionen, ich laufe dies:
function addNewProject(args) {
var info = args;
queue.push(function (done) {
loopThroughDetails(info, projID, 0, function() {
console.log('complete');
done(null, true);
});
});
}
Dies erfordert loopThroughDetails(), die eine Integration mit async.series arbeiten():
function loopThroughDetails(info, projID, i, callback) {
if (i < 500) {
getProjectDetails(projID + "-" + i, function (finished) {
if (JSON.stringify(finished) == "[]") {
info.ProjID = projID + "-" + i;
DB_COLLECTION_NAME.insert(info, function (err, result) {
assert.equal(err, null);
callback();
});
} else {
i++;
loopThroughDetails(info, projID, i, callback);
}
});
}
}
Und nach dem Aufruf all dies verwende ich einfach async.series, um die Aufgabe zu erfüllen:
async.series(queue, function() {
console.log('all done');
});
Was mache ich hier falsch? Vielen Dank für jede Hilfe, die Sie geben können! :)
Gibt es einen Grund, warum Sie die addNewProject-Methoden explizit so aufrufen? Können sie nacheinander über einen iterativen Prozess wie eine Schleife oder ... aufgerufen werden? Wie wäre es, wenn Sie nur ein oder zwei Projekte hinzufügen? –