【发布时间】:2013-10-07 09:54:53
【问题描述】:
我已经开始在一个简单的 node.js 应用程序中使用 Q Promise 包。所以我对如何在所有承诺序列完成后关闭数据库连接感兴趣。
例子:
var toDbConnectionString = function(dbSettings) {
return "mongodb://" +
dbSettings.user + ":" +
dbSettings.password + "@" +
dbSettings.url;
};
var connectionString = toDbConnectionString(dbSettings);
Q.nfcall(
MongoClient.connect,
toDbConnectionString(dbSettings))
.then(function(db) {
return Q.ninvoke(db, "collectionNames");
})
.then(function(collections) {
console.log(collections);
})
.catch(function() {
console.log(arguments);
});
我想在显示集合名称后关闭连接,但此匿名函数中没有数据库上下文。
有没有办法用 promise 模式处理这种情况?
【问题讨论】:
-
为什么不捕获
db的值并在最后一步使用它? -
我可以使用这个解决方案,但也许有更优雅的方式。
-
由于每个节点实例通常应该只有一个与数据库的连接,因此这当然是意料之中的。此外,您必须考虑到通常您需要在代码中的其他位置使用它,因此它需要可访问。例如,如果您想稍后计算每个集合的文档数(使用它们的集合名称)怎么办?