0

我们正在使用 node-mysql 并且我正在从任何文件中公开 mysql 的 createPool,我们可以要求数据库文件并获得这样的连接

var db = ("./database");

db(function(err, connection) {
   //use connection to do stuff
}

我注意到人们并不总是记得调用connection.end()它会将连接返回到池然后我们达到限制..

如何设计连接的获取,以便无论他们何时决定终止调用 connection.end() 的回调函数?我想不出一种方法来制作一个我们可以做到这一点的地方,所以开发人员只关心获得连接..

4

1 回答 1

1

我不知道mysql中的createPool,但你不能把它包装起来吗?

人们会提供一个function stuff(err, connection) { ... do whatever they want ... }. 您为什么不采用该功能并创建一个save_stuff-function?就像是

function save_stuff_creator(stuff) {
    return function(err, connection) { stuff(err, connection); connection.end() }
}

你可能想要一些try..catch关于stuff()-call 的东西。

如果您希望connection与某人一起进行其他回调,您可以将函数修改为类似的东西stuff(connection, callback)并使用类似的模块asyncseries-Object。

但我不知道connection.end()如果你想等待“用户线程”的结束,如何强制执行最终调用:这实际上是问题所在。没有这样的线程,也无法确定事件循环中的哪个事件来自谁。据我所知,事件循环没有暴露给 js-developer。

如果你不能信任你的被调用者,也许你可以把他的代码放在一个额外的子节点中(见模块cluster。所以你有一点控制权:当孩子完成时,你会收到通知。

于 2013-06-28T20:15:59.157 回答