我完全被这里难住了。我有一段NodeJS代码,我使用Async库的forEachOf函数。代码应遍历 result1 中的每个项目,从中创建 tempNode 对象,然后构造&发送一个SQL查询(我使用mysql包作为.query函数)。一旦返回,它应该将此信息添加到tempNode并添加到 returnObject 数组。
问题是,一旦达到callback()函数,处理似乎就会挂起。我可以在callback()之前的任何地方放置一个console.log语句,并验证一切正常(例如SQL查询是否正常),但它从不执行解析代码(也没有显示错误)。它似乎也没有再次通过循环,因为我已经尝试记录了' x'的值,但我只得到一个输出' 0' ;
这是代码段。它在一个返回承诺的函数内部,因此解决和拒绝。
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");
}
提前致谢!!
答案 0 :(得分:0)
问题是在最后一点附近有一个额外的“)”,并且在回调函数定义之前缺少“ {”。最后几行需要更改为:
}, function(err)
{
console.log(err);
resolve (returnObject);
});
}
else
{
reject("ERROR");
}
基本上,行为可以解释为async.ForEachOf()函数的第三个参数(即回调函数)由于括号/格式不正确而未定义。因此,当循环结束时,它似乎不知道该怎么做!