簡體   English   中英

我如何使用Promise(Q package)實現此目的?

[英]how can i achieve this using promises (Q package)?

我正在用express.js和mongodb開發一個應用程序。 我想做以下任務。 如果數據庫可用,那么我想獲取所有帖子,否則它將引發錯誤..我正在使用Q包進行承諾。 我不確定如何使以下代碼正常工作。如果有其他方法可以實現,請幫幫我。

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;
}

這是我的路線localhost:3000 / posts的代碼

exports.posts = function(req,res){
  postModel.getAllPosts().then(function(data){
    res.send(data);
  }).fail(function(err){
    res.send('error');
  });
}

這是我的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;
}

我認為問題出在您的connection方法中,因為您沒有使用大寫字母Q實例化延遲對象。

你應該用

var deferred = Q.defer();

代替

var deferred = q.defer();

因此,您的連接方法應如下所示:

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