【发布时间】:2014-06-29 02:36:49
【问题描述】:
我想对 MongoDB 驱动程序做出承诺。我写了以下代码:
var TaskBroker = function () {
this.queueName = 'task_queue';
this.rabbit = {};
this.mongo = {};
};
TaskBroker.prototype.connectRabbit = function() {
var self = this;
return amqp.connect('amqp://localhost')
.then(function(connection) {
self.rabbit.connection = connection;
return connection.createChannel()
})
.then(function(channel) {
self.rabbit.channel = channel;
return channel.assertQueue(self.queueName, {durable: true});
})
};
TaskBroker.prototype.connectMongo = function() {
console.log('Connect Mongo');
var self = this;
var defer = q.defer();
MongoClient.connect('mongodb://127.0.0.1:27017/test', {}, defer.makeNodeResolver());
return defer.promise.then(function(db) {
self.mongo.db = db;
console.log('hello');
return 42;
});
};
TaskBroker.prototype.connect = function () {
var self = this;
return this.connectRabbit()
.then(self.connectMongo);
};
你知道为什么我在调用方法connect时没有输出hello:
taskBroker.connect()
.then(function(result) {
console.log('Disconnected');
taskBroker.disconnect();
});
【问题讨论】:
-
你使用的是哪个承诺库?
-
@FlorianMargaine 它是基于 makeNoreResolver 和旧延迟模式的 Q。
-
我正在使用
Qlibrary。 -
@Julio 如果你执行一个普通的数据库调用而不对数据库做出承诺,它会起作用吗?