javascript - how can i achieve this using promises (Q package)? -


i developing app express.js , mongodb. want following task. if database available want fetch posts else throw error.. using q package promise. not sure how can make following code work.. if there other way achieve 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 code route localhost:3000/posts

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

here mongodb connection code

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 problem in connection method, because not instantiating deferred object capital letter q.

you should use

var deferred = q.defer(); 

instead of

var deferred = q.defer(); 

so connection method should like:

function connectdb(){     mongoose.connect('mongodb://localhost/demo');     var deferred = q.defer(); // q 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; } 

Comments