为什么使用Promises的节点应用程序可能无法返回?

时间:2016-07-17 20:10:20

标签: node.js promise bluebird

我在CLI应用程序中使用Bluebird。

出于某种原因,该应用尚未完成,但我无法理解为什么。我尝试在调试(在Webstorm中)运行并暂停,而它已经挂起了#34;但我没有得到任何信息。

代码格式为:

Promise.all([ /* promises */ ])
  .then(function () {
    return Promise.all([ /* promises */ ]);
  })

  .then(function () {
    return console.log("Done");
  })
  .catch(function (err) {
    return console.error("Failed: " + err);
  });

应用程序报告Done并通过检查我的数据库(因为承诺来自SQL INSERT),我可以看到所有内容。

我正在使用

mysql.createPool();

promise-mysql发送我的查询。

如何调试此挂起?或者我可以探索常见的失败模式吗?

2 个答案:

答案 0 :(得分:3)

听起来你可能没有关闭所有的mysql连接或者没有终止池。如果你还没有这样做,那么在你的mysql操作之后在.finally()中处理它是明智的:

pool.end();

docs所示(强调补充):

  

完成池的使用后,必须结束所有连接,否则Node.js事件循环将保持活动状态,直到MySQL服务器关闭连接。如果在脚本中使用池或尝试正常关闭服务器时,通常会执行此操作。要结束池中的所有连接,请使用池上的end方法

答案 1 :(得分:-3)

可以添加

.then(null, function (error) { return console.log(error); })

也许它失败了,你不会抓住这个案子