node.js async/sync 具有 For 循环、查询和附加功能
node.js async/sync with For Loop, Query, and Additional function
你好,我对以下序列有疑问,我需要 运行 多个查询,这些查询在 for 循环中相互构建,然后在获得最终结果后实施结果。我遇到一个问题,我的 for 循环正在循环通过查询,我还需要在 findX 函数 运行ning.
时停止代码
我知道这是一个异步问题,但我不知道如何链接 promises,或者使用需要循环查询的异步 npm 包,这些查询取决于先前查询的结果。提前致谢。
function findX(){
//executes another query
}
function solve(res, connection, info, requestArr, callback){
var parentID = null;
var obj = {};
for (var i = 0; i <= requestArr.length; i++) {
connection.query("SELECT WHERE ", [parentID, requestArr[i]], function(err, results) {
if(results[0]['x']){
var obj = findX(x)
break;
}else{
parentID = results[0]['parentID'];
}
});
}
//Do stuff with obj only after the final result has been set in the for loop
}
您可以使用 Async TimesSeries.
// Pretend this is some complicated async factory
var createUser = function(id, callback) {
callback(null, {
id: 'user' + id
});
};
// generate 5 users
async.times(5, function(n, next) {
createUser(n, function(err, user) {
next(err, user);
});
}, function(err, users) {
// we should now have 5 users
});
因此,在您的示例中将是这样的:
var iterations = requestArr.length - 1,
parentID,
obj;
var getResults = function (i, callback) {
connection.query("SELECT WHERE ", [parentID, requestArr[i]], function (err, results) {
if (results[0]['x']) {
obj = findX(x);
callback('done');
}
else {
parentID = results[0]['parentID'];
callback();
}
});
};
async.timesSeries(iterations, function (n, next) {
getResults(n, function (err) {
next(err);
});
}, function (err) {
// use obj
});
你好,我对以下序列有疑问,我需要 运行 多个查询,这些查询在 for 循环中相互构建,然后在获得最终结果后实施结果。我遇到一个问题,我的 for 循环正在循环通过查询,我还需要在 findX 函数 运行ning.
时停止代码我知道这是一个异步问题,但我不知道如何链接 promises,或者使用需要循环查询的异步 npm 包,这些查询取决于先前查询的结果。提前致谢。
function findX(){
//executes another query
}
function solve(res, connection, info, requestArr, callback){
var parentID = null;
var obj = {};
for (var i = 0; i <= requestArr.length; i++) {
connection.query("SELECT WHERE ", [parentID, requestArr[i]], function(err, results) {
if(results[0]['x']){
var obj = findX(x)
break;
}else{
parentID = results[0]['parentID'];
}
});
}
//Do stuff with obj only after the final result has been set in the for loop
}
您可以使用 Async TimesSeries.
// Pretend this is some complicated async factory
var createUser = function(id, callback) {
callback(null, {
id: 'user' + id
});
};
// generate 5 users
async.times(5, function(n, next) {
createUser(n, function(err, user) {
next(err, user);
});
}, function(err, users) {
// we should now have 5 users
});
因此,在您的示例中将是这样的:
var iterations = requestArr.length - 1,
parentID,
obj;
var getResults = function (i, callback) {
connection.query("SELECT WHERE ", [parentID, requestArr[i]], function (err, results) {
if (results[0]['x']) {
obj = findX(x);
callback('done');
}
else {
parentID = results[0]['parentID'];
callback();
}
});
};
async.timesSeries(iterations, function (n, next) {
getResults(n, function (err) {
next(err);
});
}, function (err) {
// use obj
});