我正在使用promises重构我的代码。我遇到了一个问题。我有两条API路线。第一个是api.js,第二个是account.js。我还有4个控制器(CommentController,ZoneController,ProfileController,AccountController)。
CommentController,ZoneController和ProfileController共享相同的API路由(api.js)。
account.js使用AccountController。但AccountController的方法使用ProfileController的方法。
我最终让Promise调用另一个Promise,但我没有正确地返回数据。它将服务器挂起。当一个Promise调用另一个Promise时,如何返回数据? 基本上,account.js调用的AccountController.js有一个调用ProfileController.js的方法,但AccountController和ProfileController都被重构为Promise。我没有收到数据。请帮忙。
AccountController.js
var ProfileController = require('./ProfileController');
module.exports = {
currentUser: function(req) {
return new Promise(function(resolve, reject) {
if (req.session == null) {
reject({message: 'User not logged in'});
return;
}
if (req.session.user == null) {
reject({message: 'User not logged in'});
return;
}
ProfileController.findById(req.session.user, function(err, result) {
if (err) {
reject({message: 'fail'});
return;
}
resolve(result);
return;
});
});
}
ProfileController.js
findById: function(id) {
return new Promise(function(resolve, reject){
Profile.findById(id, function(err, profile){
if(err){
reject(err);
return;
}
resolve(profile);
return;
});
})
},
account.js
router.get('/:action', function(req, res, next) {
var action = req.params.action;
if (action == 'logout') {
req.session.reset();
res.json({
confirmation: 'success',
message: 'Bye!'
});
return;
}
if (action == 'login') {
res.json({
confirmation: 'success',
action: action
});
return;
}
if (action == 'currentuser') {
AccountController.currentUser(req)
.then(function(result){
res.json({
confirmation: 'success',
user: result
});
return;
})
.catch(function(err){
res.json({
confirmation: 'fail',
message: err.message
});
return;
});
}
});
答案 0 :(得分:0)
您应该修改AccountController.js
AccountController.js
var ProfileController = require('./ProfileController');
module.exports = {
currentUser: function(req) {
return new Promise(function(resolve, reject) {
if (req.session == null) {
reject({message: 'User not logged in'});
return;
}
if (req.session.user == null) {
reject({message: 'User not logged in'});
return;
}
ProfileController.findById(req.session.user).then(
function (profile){
resolve(profile);
},function (err) {
reject(err);
});
}