我想知道这种方法是否正确或者是否需要进一步改进,也许还可以自定义mySQL getConnection
方法???
request: function(queryRequest) {
return new Promise(function(resolve, reject){
Database.getConnection(function(error, connection){
if(error) {
reject({error: error, queryRequest: queryRequest});
} else {
connection.query(queryRequest.sql, queryRequest.values, function(error, rows, fields){
if(error) {
reject({error: error, queryRequest: queryRequest});
} else {
resolve({rows: rows, fields: fields, queryRequest: queryRequest});
}
});
}
});
});
},
getConnection
模块中定义的Database
方法。
getConnection: function(callback) {
this.pool.getConnection(function(error, connection){
callback(error, connection);
});
},
答案 0 :(得分:2)
也可以宣传自定义mySQL
getConnection
方法?
只有可能。虽然它可以被认为更清洁,并使你的回调金字塔更平坦,但它并没有太多改进代码:
function request(queryRequest) {
return new Promise(function(resolve, reject) {
Database.getConnection(function(error, connection) {
if (error)
reject(error);
else
resolve(connection);
});
}).then(function(connection) {
var res = new Promise(function(resolve, reject) {
connection.query(queryRequest.sql, queryRequest.values, function(error, rows, fields) {
if (error)
reject(error);
else
resolve({rows: rows, fields: fields, queryRequest: queryRequest});
});
});
return res;
}).catch(function(error) {
throw {error: error, queryRequest: queryRequest};
});
}
我想知道这种方法是否正确
对于数据库连接,您可能需要查看disposer pattern。如果您不需要它,您仍然应该记住始终使用类似
之类的东西释放您的连接….then(function (connection) {
var res = …;
// better be solved using `finally` where supported
return res.then(end, end);
function end() {
connection.release();
return res;
}
})
此外,拒绝使用不是Error
的对象的承诺是一种不好的做法,你可能会做得更好
….catch(function(error) {
error.queryRequest = queryRequest;
throw error;
})
或原始模式中的等效物。