NodeJS Async ForEachOf - 陷入无限循环?

时间:2018-03-16 16:56:28

标签: javascript node.js asynchronous callback

我完全被这里难住了。我有一段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");
    }

提前致谢!!

1 个答案:

答案 0 :(得分:0)

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

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

基本上,行为可以解释为async.ForEachOf()函数的第三个参数(即回调函数)由于括号/格式不正确而未定义。因此,当循环结束时,它似乎不知道该怎么做!