[英]how can i achieve this using promises (Q package)?
I am developing an app with express.js and mongodb. 我正在用express.js和mongodb开发一个应用程序。 I want to do following task. 我想做以下任务。 If database is available then i want to fetch all posts else it will throw an error.. I am using Q package for promise. 如果数据库可用,那么我想获取所有帖子,否则它将引发错误..我正在使用Q包进行承诺。 I am not sure how can i make the following code work.. If there is any other way to achieve this then help me out. 我不确定如何使以下代码正常工作。如果有其他方法可以实现,请帮帮我。
function getAllPosts(){
var deferred = Q.defer();
db.connectDB().then(function(){
db.posts.find({},function(err,data){
if(err){
deferred.reject(new Error('problem'));
}else{
deferred.resolve(data);
}
});
}).fail(function(err){
console.log(err);
});
return deferred.promise;
}
Here is my code for route localhost:3000/posts 这是我的路线localhost:3000 / posts的代码
exports.posts = function(req,res){
postModel.getAllPosts().then(function(data){
res.send(data);
}).fail(function(err){
res.send('error');
});
}
Here is my mongodb connection code 这是我的mongodb连接代码
function connectDB(){
mongoose.connect('mongodb://localhost/demo');
var deferred = q.defer();
mongoose.connection.on('open',function(){
createTables();
deferred.resolve();
});
mongoose.connection.on('error',function(){
deferred.reject(new Error('Error connecting database'));
});
return deferred.promise;
}
I think the problem is in your connection
method, because you are not instantiating the deferred object with capital letter Q
. 我认为问题出在您的connection
方法中,因为您没有使用大写字母Q
实例化延迟对象。
You should use 你应该用
var deferred = Q.defer();
instead of 代替
var deferred = q.defer();
So your connection method should look like: 因此,您的连接方法应如下所示:
function connectDB(){
mongoose.connect('mongodb://localhost/demo');
var deferred = Q.defer(); // Q with capital letter
mongoose.connection.on('open',function(){
createTables();
deferred.resolve();
});
mongoose.connection.on('error',function(){
deferred.reject(new Error('Error connecting database'));
});
return deferred.promise;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.