私はnodejsに取り組んでおり、コントローラのロジックを変更する必要がないように、応答データをコントローラと同じに保つことによってモデルコールバックを約束しています。私は青い鳥と一緒に働いている間、私が知っているコールバックを使うのは悪い考えです。受け入れ答えサンプルコントローラコードに基づいbluebird約束で他の関数を呼び出すための結果を使用する
var functions={
checkifexists:function(data){
return new Promise(function(resolve,reject){
// Query is fired here
resolve(data) or reject (data)
});
},
create:function(data,cb{
mysql.getConnectionFromPool(function(err,connection){
this.checkifexists(data,connection).then(function(res){
if(res.count)
{
cb(res.count);
}
else
{
connection.query(insertsql,data,function(err,data){
// Handle any error or return insertID
cb(null,insertID)
});
}
}).catch(function(e){
console.log(e);
}).finally(function(){
connection.release();
});
});}
:
sampleModel.create(req.body,function(err,result){
console.log("Err : "+err); // Always Null
console.log("Result :"+result); // Always displays both reject and resolve cases
});
上記のコードでは、そこに1つのcheckifexists関数であり、関数を作成するが、コントローラが機能のみを作成するから、いわゆる、私はそれに応じて、まだコードによって調整されますそれは乱雑に見えます。
これは正しい方法ですか?ある関数の呼び出しを別の関数に渡すなど、一連の関数を呼び出す必要がある場合はどうなりますか?
「*私はコールバック*を使用する必要があります」 - 申し訳ありませんが、私はその理由を知りませんでした。あなたは精緻化できますか? – Bergi
あなたも 'connection.query'を約束するべきです – Bergi
実際にコードはコントローラとモデルに分解されているので、現在はコールバックが実装されているコントローラ部分ではないことを約束するようにモデルを変更したいだけです。 – Vibhas