我尝试使用 Async Node.js 模块连续执行 2 个循环,第一个循环在另一个循环之前。
async.series([
insertSkill,//first loop
insertBehaviours//second loop
], function(err, results){
console.log(results);//print results
});
这是每个函数中的代码,为了更好的可读性,我删除了一些代码
function insertSkill(fnCallback){
async.eachSeries(Object.keys(behaviours), function (aSkill, callback){
if (aSkill.indexOf('skillid') > -1) {
if (behaviours[aSkill] == null || behaviours[aSkill] == "") {}
connection.get().query('SELECT skill_id FROM skills WHERE skill_id = ?', num, function (err, skillResults) {
if (skillTitle != null || skillTitle != "") {
connection.get().query('INSERT INTO skills SET ?', [skill], function (err, skillResults) {
if (err) {}
else {
console.log("1");//PRINTING AFTER 2, DONT WANT THAT!!! }
});
}
});
}
callback(null);
},fnCallback);
}
第二个函数
//Second Function
function insertBehaviours(fnCallback){
async.eachSeries(Object.keys(behaviours), function (aBehaviour, secondCallback) {
if (aBehaviour.indexOf('behaviourid') > -1) {
if (behaviours[aBehaviour] == null || behaviours[aBehaviour] == "") {
console.log("2");//PRINTING BEFORE 1, DONT WANT THAT!!!
});
}
}
secondCallback(null);
},fnCallback);
}
问题是,第二个函数 insertBehaviours 在 insertSkills 之前先发生。我希望 insertSkills 首先发生并在 insertBehaviours 之前发生
最佳答案
原因是您的第一个函数,insertSkill
中有几个异步方法。但是,您在这些方法有机会完成之前就调用了迭代器上的回调。您的 insertSkill
方法应该看起来更像这样:
function insertSkill(fnCallback){
async.eachSeries(Object.keys(behaviours), function (aSkill, callback){
if (aSkill.indexOf('skillid') > -1) {
if (behaviours[aSkill] == null || behaviours[aSkill] == "") {}
connection.get().query('SELECT skill_id FROM skills WHERE skill_id = ?', num, function (err, skillResults) {
if (skillTitle != null || skillTitle != "") {
connection.get().query('INSERT INTO skills SET ?', [skill], function (err, skillResults) {
if (err) {}
else {
console.log("1");//PRINTING AFTER 2, DONT WANT THAT!!!
callback(null); // notice I moved this.
}
});
}
});
}
},fnCallback);
}
因为只有在两条 SQL 语句运行后才会调用回调
函数。
关于javascript - Node.js 异步系列无法按顺序工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37759582/