我正在研究nodejs並儘可能地通過保持響應數據與控制器相同以便我不需要更改控制器邏輯來將模型回調轉換爲承諾。我需要使用回調,我知道在使用藍鳥時是一個糟糕的主意。使用一個函數的結果調用其他藍鳥承諾
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
});
在上面的代碼中有一個checkifexists功能和創造功能,但是從控制器只能創建函數被調用,所以我的代碼,因此,但仍調整它看起來很凌亂。
這是正確的做法嗎?如果我需要連續調用一系列函數而又一個函數,那麼我可能會將一個函數的響應傳遞給另一個函數,等等。
「*我需要使用回調*」 - 對不起,我沒有得到原因。你能詳細說明嗎? – Bergi
你應該promisify'connection.query' – Bergi
實際上代碼已經分解成控制器和模型,所以目前我只是想改變模型,承諾不是控制器部分有回調實現。 – Vibhas