Javascript NodeJS异步ForEachOf-卡在无限循环中?

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查询可以工作),但它从不执

我完全被难住了。我有一段NodeJS代码,正在使用异步库的forEachOf函数。代码应该循环遍历result1中的每个项,从中创建一个tempNode对象,然后构造并发送一个SQL查询(我使用mysql包实现.query函数)。一旦返回,它应该将此信息添加到tempNode并添加到returnObject数组中

问题是,一旦到达callback()函数,处理就会挂起。我可以将console.log语句放在callback()之前的任何位置,并验证一切正常(例如,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");
    }

提前谢谢

问题在于,在回调函数定义的最末端附近有一个额外的“”,而在回调函数定义之前缺少一个“{”。最后几行需要更改为:

}, function(err) 
  {
  console.log(err);
  resolve (returnObject);
  });
} 
else 
{
  reject("ERROR");
}

基本上,这种行为可以通过以下事实来解释:async.ForEachOf()的第三个参数(即回调函数)由于括号/格式不正确,函数未定义。因此,循环完成后,它似乎不知道该做什么!

您的查询是否构造良好?您是否从查询中获得任何输出尝试隔离每个步骤以检测问题。您好,是的,查询部分似乎正常。返回后的result2的输出正好是我想是这样的。甚至在回调()之前做一个console.log(returnObject)给我确切的我需要什么是
拒绝
?不要把承诺代码和
异步
库混在一起。你不会得到一个很容易调试的后括号错误吗?有趣的是,我没有得到任何错误。我使用的是VS代码,我觉得我可能在错误的地方添加了括号,把事情搞砸了ng错误。也许分机能帮到我?谢谢