を作るの詳細をお読みください。あなたは
router.get('/login', function(req,res,next) {
// send call to login function.
var ID= req.query.ID;
var Password = req.query.Password
function LoginCallback(err,myLoginResult){
res.json(myLoginResult);
}
ctlLogin.login(ID,Password, LoginCallback);
});
または
のようなこのへのアクセスを持つことができctlLoginは、機能対応無しの約束あなたが代わりにコールバック
ctlLogin.login(ID,Password)
.then(LoginCallback)
.catch(console.log(err))
の約束を使用できるかどうか、関数のスコープ(reqは、解像度のうち、LoginCallback機能が必要な場合は、次に、コールバック関数を作成して関数にresを渡し、error、resultsとres、またはuse bindを渡してLoginCallback関数を呼び出す必要があります。
function sendResponseToSever(res, err, myLoginResult){
if(err){
return res.send({
errors: err,
status: 500 // what ever status code you want to set
});
}
return res.json(results);
}
router.get('/login', function(req,res,next) {
// send call to login function.
var ID= req.query.ID;
var Password = req.query.Password
ctlLogin.login(ID,Password, sendResponseToSever.bind(null, res)
//using bind function
// OR
ctlLogin.login(ID,Password, function(err, myLoginResult){
sendResponseToSever(err, myLoginResult, res);
// now sendResponseToSever is a generic function which you can call
// from any route
});
});
});
最も好ましい方法は、コールバック地獄を避けたい場合は約束の使用です。 あなたが言及したように、あなたはそれを避けることができますネスティングを避けるために約束を使用してください。
あなたは(私たちは約束し、他の難しいものを使用してスキップする場合)私はあなたのケースで使用するソリューションは、コンテキストに機能を結合された約束
十分な私はログインメソッドにコールバック関数を送信する必要がある "*なぜですか? – 4castle
私は同調的に動作すると思います。 – Dani
私の意図したことは、なぜあなたはコールバックが悪いデザインだと思いますか?彼らはかなり標準的ですが、もしあなたが代案を望むなら、約束を返すことができます。 – 4castle