简体   繁体   English

我如何使用Promise(Q package)实现此目的?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM