Javascript 从回调中调用函数会导致节点应用程序挂起

Javascript 从回调中调用函数会导致节点应用程序挂起,javascript,node.js,Javascript,Node.js,我已经用实际代码更新了帖子 问题是节点应用程序挂起并且不会退出,除非我在addArticle中注释掉查询。我不知道我在这里做错了什么(关于绞刑问题) 您可能需要在所有查询完成后关闭连接。您可以尝试使用库按顺序运行查询,然后在主回调中关闭连接 这有点棘手,但首先需要定义一个要执行的函数数组。然后运行async.sequence(arrayOfFns,masterCallback)。主回调函数获取错误和结果(注意复数形式,它来自所有函数)。在主回调中,终止mysql连接和/或结束进程 为此,我将重写

我已经用实际代码更新了帖子

问题是节点应用程序挂起并且不会退出,除非我在addArticle中注释掉查询。我不知道我在这里做错了什么(关于绞刑问题)


您可能需要在所有查询完成后关闭连接。您可以尝试使用库按顺序运行查询,然后在主回调中关闭连接

这有点棘手,但首先需要定义一个要执行的函数数组。然后运行async.sequence(arrayOfFns,masterCallback)。主回调函数获取错误和结果(注意复数形式,它来自所有函数)。在主回调中,终止mysql连接和/或结束进程

为此,我将重写addArticle查询,只返回查询字符串。然后在您的
$(链接)之前。每个
循环,我将创建一个名为
toInsert

在每一个循环中我都会说

toInsert.push(function(callback) {
    connection.query(addArticle(...),function(err) {
         if(err) callback(err);
         else callback(null,true);
    });
});
然后在循环运行之后

 async.sequence(toInsert,function(errs,results) {
      connection.close() //not sure if correct
      process.exit(); //maybe, if needed?
 });

什么是
foo
?你能做一些控制台日志查看你的控制流到哪里吗?
c
foo
中的回调函数吗?如果是这样,您需要在
connection.query的回调中调用
c()
。您需要提供不太神秘的函数/参数名称,以获得更有用的注释或答案。关闭连接确实是我需要做的事情。有趣的是,在任何函数之外分配连接变量会导致connection.end()调用引发异常。将该代码移动到执行实际db交互的函数中修复了这一问题。
 async.sequence(toInsert,function(errs,results) {
      connection.close() //not sure if correct
      process.exit(); //maybe, if needed?
 });