据说Async.series按顺序执行该功能,但它不适合我,
我的代码:
var mysql=require('mysql');
var async=require('async');
var con;
var EID=30;
var res;
async.series([
function(callback) {
console.log("inside first func");
con = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'imd2'
});
callback();
},
function(callback) {
console.log("inside second function");
var sql = "select EName from users where EID=" + EID;
con.query(sql, function(err, rows) {
console.log("inside query");
res = rows;
});
callback();
}
],
function(err) {
console.log("third function");
if (err)
return next(err);
console.log(res);
});
console.log("hi");
我的输出是
inside first func
inside second function
third function
undefined
hi
inside query
如果我更改了con.query()中的第二个函数的回调 然后输出变为
inside first func
inside second function
hi
inside query
third function
[ RowDataPacket { EName: 'AndhraPradesh' } ]
我的预期输出是
inside first func
inside second function
inside query
third function
[ RowDataPacket { EName: 'AndhraPradesh' } ]
hi
如果我错了,请纠正我,但是应该在最后调用函数(错误),然后“hi”应该显示正确吗?(根据给出的定义) 我该怎么办才能获得预期的产量呢?
P.S“hi”只是一个调试,在执行async.series之后会有非常重要的代码,它不会最适合async.series中的新函数 感谢
答案 0 :(得分:1)
function(err)
这里只是异步系列的回调。你想要做的一切 系列之后必须在这里完成。在此函数中移动console.log("hi")
应该会有所帮助。
function(err) {
console.log("third function");
if (err)
return next(err);
console.log(res);
console.log("hi");
});
第二点是在异步系列中,callback()
只是调用下一个函数。现在的问题是你在系列的第二个函数中使用了另一个异步方法。
function(callback) {
con.query(sql, function(err, rows) {
console.log("inside query");
res = rows;
});
callback();
}
con.query
是具有回调函数的异步任务。异步意味着您不知道何时处理回调。因此,您需要在callback()
的回调中调用con.query
,如此:
function(callback) {
con.query(sql, function(err, rows) {
console.log("inside query");
res = rows;
callback();
});
}
这样,只有当您从查询中收到结果(并记录在“查询内部”)时,才会触发下一个函数。