【发布时间】:2017-05-27 03:22:19
【问题描述】:
首先,我是 nodejs 的新手。使用 API,我必须在每个循环中执行多个查询。所以,我开始使用带有 express 的异步模块。我使用的确切代码是
new_or_updated = {};
async.each(rows, function(e, callbackParent) {
new_or_updated.id = e.id;
async.parallel([
function(callback){
db.query("SELECT sender_string FROM filter_positive_rules_sender WHERE rule_id = ? AND is_deleted = 0", e.id,function(err, rows, fields){
if (err) {
return callback(err);
}
new_or_updated.sender = rows.map(x => x.sender_string);
callback(null);
});
},
function(callback){
db.query("SELECT subject_string FROM filter_positive_rules_subject WHERE rule_id = ? AND is_deleted = 0", e.id ,function(err, rows, fields){
if (err) {
return callback(err);
}
new_or_updated.subject = rows.map(x => x.subject_string);
callback(null);
});
},
function(callback){
db.query("SELECT body_string FROM filter_positive_rules_body WHERE rule_id = ? AND is_deleted = 0", e.id ,function(err, rows, fields){
if (err) {
return callback(err);
}
new_or_updated.body = rows.map(x => x.body_string);
callback(null);
});
}
],
function(err) {
if (err) {
res.status(500).json(
"Internal server error"
).send();
}
console.log(new_or_updated):
callbackParent(null, new_or_updated);
});
},
function(err, result) {
if (err) {
res.status(500).json(
"Internal server error"
).send();
}
console.log(result)
});
如您所见,我正在尝试使用异步模块填充对象。当我在并行异步中控制台 new_or_updated 时,数组已正确构建。但是,当我将变量发送到每个异步回调并对其进行控制台(结果变量)时,我得到未定义。此外,当我在 parentCallback 中控制台 new_or_updated 时,我只得到数组中的一个元素(使用每个异步模块构建的最后一个数组)。
我在这里做错了什么?有人可以向我解释一下嵌套异步实际上应该如何在实践中工作。
【问题讨论】:
-
使用全局变量来存储值。尝试在执行异步操作的函数之外初始化变量
-
@ArUn new_or_updated 变量在两个异步之外初始化。
-
你能在那个主函数之外初始化它并尝试
-
@ArUn 我做到了,但我仍然只得到最后一个结果。
标签: javascript node.js express asynchronous async.js