約束を使ってコードをリファクタリングしています。私は問題に遭遇している。 APIルートは2つあります。最初はapi.js、2番目はaccount.jsです。私は4つのコントローラ(CommentController、ZoneController、ProfileController、AccountController)も持っています。別の約束を呼び出すことを約束したAPI約束
CommentController、ZoneController、ProfileControllerは同じAPIルート(api.js)を共有します。
account.jsはAccountControllerを使用します。しかし、AccountControllerのメソッドはProfileControllerのメソッドを使用します。
プロミスに別のプロミスを呼び寄せてしまったが、データが正しく返されていない。サーバーがぶら下がっています。あるPromiseが別のPromiseを呼び出しているときに、どのようにデータを返すことができますか? account.jsは、ProfileController.jsを呼び出すメソッドを持つAccountController.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;
});
}
});
を変更する必要がありますが、あなたはProfileController' 'であなたのリファクタリング' findById'機能を使用するためにAccountController' 'であなたの' currentUser'機能を変更するのを忘れたようです:あなたはコールバックを渡していますが、 'findById'は単一の' id'引数だけを期待しています –
期待している出力の種類がわからないので、いくつかのテストケースを含めてください。 –
私の問題を見てくれてありがとう。カーミット解を解く。 –