Я пытаюсь сделать что-то довольно простое в NodeJS - я хочу запускать функции по одному за раз. Все эти функции имеют обратные вызовы. Я изложил свой код ниже, а также функцию, которую они запускают для дальнейшей справки.Выполнение синхронных операций в NodeJS (MongoDB Operations/Async.js)
Моя проблема в том, что первые два работают абсолютно нормально - по одному, но третья итерация просто игнорирует первые две функции и просто идет в любом случае. Это вызывает настоящую проблему, так как моя программа работает с помещением объектов в базу данных и вызывает дублирование объектов.
Общая цель состоит в том, чтобы каждая функция запускалась по одному за раз. Здесь что-то не хватает? Большое спасибо за Вашу помощь!
Обратите внимание, что в приведенных ниже функциях я упростил все параметры для «args» для удобства чтения.
Вызов функции:
addNewProject(args);
addNewProject(args);
addNewProject(args);
Внутри функции, я бегу это:
function addNewProject(args) {
var info = args;
queue.push(function (done) {
loopThroughDetails(info, projID, 0, function() {
console.log('complete');
done(null, true);
});
});
}
Это вызывает loopThroughDetails(), которая является интеграция работы с async.series():
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);
}
});
}
}
И после вызова всего этого, я просто использую async.series для выполнения задачи:
async.series(queue, function() {
console.log('all done');
});
Что я здесь делаю неправильно? Большое спасибо за любую помощь, которую вы можете дать! :)
Есть ли причина, по которой вы явно вызываете методы addNewProject? Могут ли они быть вызваны по одному с помощью итеративного процесса, например, цикла или ... Например, что делать, если у вас есть только один или два проекта? –