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