如何使用promise重用mongo连接
How to reuse a mongo connection with promises
如何更改数据库连接调用中的内容,以便执行db.collection()
:
// Create a Mongo connection
Job.prototype.getDb = function() {
if (!this.db)
this.db = Mongo.connectAsync(this.options.connection);
return this.db;
};
// I want to be able to do this
Job.prototype.test = function() {
return this.db.collection('abc').findAsync()...
};
// Instead of this
Job.prototype.test = function() {
return this.getDb().then(function(db) {
return db.collection('abc').findAsync()...
});
};
我的代码总是调用getDb
,所以会创建连接,所以这不是问题。例如:
this.getDb().then(test.bind(this));
但实际上,我把很多这样的电话串在一起,所以我想寻找一种更干净的方法。
这是有效的——只是想知道是否有更好的整体方法来处理这个问题。
Job.prototype.getDb = function(id) {
var self = this;
return new P(function(resolve, reject) {
if (!self.db) {
return Mongo.connectAsync(self.options.connection)
.then(function(c) {
self.db = c;
debug('Got new connection');
resolve(c);
});
}
debug('Got existing connection');
resolve(self.db);
});
};
我想这真的只是一个mongo连接问题,也许不仅仅是承诺。我看到的所有Mongo示例要么只是在连接回调中进行所有调用,要么使用Express之类的框架并在启动时分配它。
我想做这个
return this.db.collection('abc').findAsync()
不,当您不知道数据库是否已经连接时,这是不可能的。如果一开始可能需要连接,并且是异步的,那么this.db
必须产生promise,并且需要使用then
。
请注意,使用Bluebird可以稍微缩短代码,并使用.call()
方法避免冗长的.then()
回调:
Job.prototype.getDb = function() {
if (!this.db)
this.db = Mongo.connectAsync(this.options.connection);
return this.db;
};
Job.prototype.test = function() {
return this.getDb().call('collection', 'abc').call('findAsync');
};
相关文章:
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 如何使用密码检测网络中的状态连接
- 如何处理node.js节点mongodb中的连接和查询队列
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- Twilio-显示所有连接参与者的远程参与者视频
- 操作放置在画布上的元素之间的连接
- TypeError:_this.store.getState在使用来自Redux的连接时不是函数
- jQuery UI可排序-多连接列表拖动
- 如何使用offer/answer交换来自两个对等连接的流
- 在Qualtrics中,介绍如何动态连接两个滑块
- 如何使用promise重用mongo连接
- 通过 socket.io 将 Mongo 连接传递给 JQuery 代码
- 我应该在操作后关闭 Mongo 连接吗?
- 导出 MONGO 数据库连接到模型.js文件
- 使用MongoJS管理与Mongo的连接的正确方法是什么?
- 连接mongo到节点错误
- 连接日期和时间字符串到mongo日期对象
- 如何调试节点+ mongo连接错误
- 最好在每个请求上都有一个从节点或连接到memcached/mongo的单一全局连接
- 连接mongo和插入帖子最简单的几行代码是什么?