Javascript NodeJS异步ForEachOf-卡在无限循环中?
我完全被难住了。我有一段NodeJS代码,正在使用异步库的forEachOf函数。代码应该循环遍历result1中的每个项,从中创建一个tempNode对象,然后构造并发送一个SQL查询(我使用mysql包实现.query函数)。一旦返回,它应该将此信息添加到tempNode并添加到returnObject数组中 问题是,一旦到达callback()函数,处理就会挂起。我可以将console.log语句放在callback()之前的任何位置,并验证一切正常(例如,SQL查询可以工作),但它从不执行解析代码(也不会显示错误)。它似乎也没有再次通过循环,因为我尝试记录“x”的值,但我只得到一个“0”的输出 下面是代码片段。它在一个函数中,返回一个承诺,因此解析和拒绝Javascript NodeJS异步ForEachOf-卡在无限循环中?,javascript,node.js,asynchronous,callback,Javascript,Node.js,Asynchronous,Callback,我完全被难住了。我有一段NodeJS代码,正在使用异步库的forEachOf函数。代码应该循环遍历result1中的每个项,从中创建一个tempNode对象,然后构造并发送一个SQL查询(我使用mysql包实现.query函数)。一旦返回,它应该将此信息添加到tempNode并添加到returnObject数组中 问题是,一旦到达callback()函数,处理就会挂起。我可以将console.log语句放在callback()之前的任何位置,并验证一切正常(例如,SQL查询可以工作),但它从不执
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");
}
提前谢谢 问题在于,在回调函数定义的最末端附近有一个额外的“)”,而在回调函数定义之前缺少一个“{”。最后几行需要更改为:
}, function(err)
{
console.log(err);
resolve (returnObject);
});
}
else
{
reject("ERROR");
}
基本上,这种行为可以通过以下事实来解释:async.ForEachOf()的第三个参数(即回调函数)由于括号/格式不正确,函数未定义。因此,循环完成后,它似乎不知道该做什么!您的查询是否构造良好?您是否从查询中获得任何输出尝试隔离每个步骤以检测问题。您好,是的,查询部分似乎正常。返回后的result2的输出正好是我想是这样的。甚至在回调()之前做一个console.log(returnObject)给我确切的我需要什么是
拒绝
?不要把承诺代码和异步
库混在一起。你不会得到一个很容易调试的后括号错误吗?有趣的是,我没有得到任何错误。我使用的是VS代码,我觉得我可能在错误的地方添加了括号,把事情搞砸了ng错误。也许分机能帮到我?谢谢