我有一個Node/Express路由功能,在另一個模塊中執行Redis呼叫。我想在一個節點模塊中執行一個複雜的Redis函數,併發送一個簡單的回調,告訴它路由模塊是成功的。 Redis調用會執行,但我無法執行任何同步函數,它們甚至從Redis調用中檢索一個簡單的真實值。這裏是我的Redis的功能:快速Node.JS - 接收Redis回調,執行承諾
doctorDB.js
var addDoctor = function addDoctor(id, doc){
var fields = Object.keys(doc.fields);
return client.multi()
.sadd("Doctors", id)
.hmset(id, "lastName", doc.lastName, "firstName", doc.firstName)
.hmset(id, "email", doc.email, "university", doc.university, "work", doc.work)
.sadd(id + ":fields", fields)
.exec(function(err, replies){
console.log("It's in this");
if (doc.middleName){
console.log("Now here");
client.hset(id, "middleName", doc.middleName);
return true;
} else {
console.log("Or here");
return true;
}
});
};
一切努力實現這一目標。現在我想要將回調發送到Express路由器以向客戶端發送響應。我希望它是一個同步函數的形式,我已經嘗試了許多使用Q和Async,但沒有任何工作。所以要麼A.我沒有完全掌握承諾函數,或者B.我沒有完全掌握將值返回給另一個模塊。任何幫助,將不勝感激。
以供參考,在這裏是在快遞路由器到底有多少失敗嘗試:我想通了這一點
routes.js
app.post('/addDoctorInfo', ensureLoggedIn('/login'), function(req, res, next){
// function getThis(req){
// var deferred = Q.defer();
// doctorDB.addDoctor(req.body.id, req.body.doc).then(function(response){
// deferred.resolve(response);
// }, function(err){
// console.log(err);
// return deferred.resolve(err);
// });
// return deferred.promise;
// }
// var x = getThis(req);
// console.log(x);
doctorDB.addDoctor(req.body.id, req.body.doc).then(function(x){
console.log(x);
}).catch(function(err){
console.log(err);
}).finally(function(){
console.log("We made it!");
});
// function sendMsg(info){
// console.log(info);
// res.send({success: true});
// }
// async.waterfall([
// doctorDB.addDoctor(req.body.id, req.body.doc),
// sendMsg(info)
// ], function(err){
// console.log(err)
// });
// var DBCALL = doctorDB.addDoctor(req.body.id, req.body.doc);
// Q.fcall(DBCALL).then(function(x){
// return console.log(x);
// }).catch(function(err){
// console.log(err);
// });
});