我有以下代码。我得到“回调在”addToMongo.push(...)之后已经被称为错误。对我来说这没有多大意义,因为它应该只执行一次。
主要代码:
async.waterfall([
(callback) => {
sql.query("SELECT id FROM ....", (err, rows, fields) => {
err ? callback(err, []) : callback(null, rows);
});
},
(rows, callback) => {
/*Begin for-loop*/
for (var i = 0; i < rows.length; i++) {
let id = rows[i].id;
async.waterfall([
(callb) => {
console.log("doing getvalues");
getValues.push(id, (err, values) => {
err ? callb(err, []) : callb(null, values);
});
},
(values, callb) => {
console.log("doing addtomongo");
addToMongo.push(values, (err, res) => {
err ? callb(err, []) : callb(null, res);
});
}
],
(err, res) => {
err ? callback(err) : console.log("res");
});
} /*End for-loop*/
}
], (err, result) => {
err ? console.trace(err) : "";
});
});
这两个函数(getvalues和addToMongo)
var getValues = async.queue((id, callback) => {
let q = query;
sql.query(q, (err, rows, fields) => {
err ? callback(err, []) : callback(null, rows);;
});
}, 5);
var addToMongo = async.queue((values, callback) => {
callback(null, "done");
}, 5);