【发布时间】:2018-08-25 19:54:15
【问题描述】:
我完全被难住了。我有一段 NodeJS 代码,我正在使用 Async 库的 forEachOf 函数。代码应该循环遍历 result1 中的每个项目,从中创建一个 tempNode 对象,然后构造并发送一个 SQL 查询(我正在使用 .查询功能)。一旦返回,它应该将此信息添加到 tempNode 并添加到 returnObject 数组。
问题在于,一旦到达 callback() 函数,处理似乎就会挂起。我可以在 callback() 之前的任何位置放置一个 console.log 语句,并验证一切正常(例如 SQL 查询有效),但它从不执行解析代码(也没有显示错误)。它似乎也没有再次通过循环,因为我尝试记录'x'的值,但我只得到一个输出'0'。
这是代码 sn-p。它位于返回承诺的函数内部,因此有 resolve 和 reject。
var returnObject = [];
if (result1.length !=0) {
// ! This forEachOf gets stuck !
async.forEachOf(result1, function(o_1, x, callback) {
let tempNode = {
NODE: result1[x].node,
FIELDS: [
{"ID": result1[x].id },
{"SITE": result1[x].site }
]
}
// Construct model query using the node identifier
var q_model = `SELECT model FROM *TABLE* WHERE name = '${result1[x].node}'`;
// Second query to determine the BTS model
mysqlPooler.query(q_model, function(err,result2,fields) {
if (result2.length !=0 && result2) {
tempNode.FIELDS.push({"MODEL":result2[0].model});
returnObject.push(tempNode);
}
else {
reject("ERROR: No MODEL");
}
console.log(result2);
// Done processing this iteration
callback();
});
}), function(err)
console.log(err);
resolve (returnObject);
}
}
else
{
reject("ERROR");
}
提前致谢!!
【问题讨论】:
-
您的查询结构合理吗?您是否从查询中获得任何输出尝试隔离每个步骤以检测问题。
-
嗨,是的,查询部分似乎没问题。结果返回后的输出正是我所期望的。即使在 callback() 之前执行 console.log(returnObject) 也能满足我的需要
-
什么是
reject?不要将 promise 代码与async库混用。
标签: javascript node.js asynchronous callback