我试图做一些相当简单的事情,它似乎在NodeJS中 - 我想一次运行一个函数。所有这些功能都有回调。我在下面概述了我的代码,以及它们运行的功能以供进一步参考。在NodeJS中同步运行函数(MongoDB操作/ Async.js)
我的问题是,前两个工作是绝对正常的 - 一次一个,但第三次迭代只是忽略了前两个功能,只是无论如何。这导致了一个真正的问题,因为我的程序在将对象放入数据库中工作,并导致重复的对象。
总体目标是简单地让每个功能一次运行一个。有什么我在这里失踪?非常感谢你的帮助!
请注意,在下面的函数中,我将所有参数简化为“参数”以便于阅读。
调用功能:
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方法的原因?它们可以通过像循环一样的迭代过程一次被调用一个...例如,如果您只添加了一个或两个项目,该怎么办? –