gpt4 book ai didi

javascript promise 池化连接并执行查询

转载 作者:行者123 更新时间:2023-12-02 16:01:53 33 4
gpt4 key购买 nike

我想知道这种方法是否正确或者是否需要进一步改进,也许是 promisify 自定义 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);
});
},

最佳答案

maybe promisify custom mySQL getConnection method as well?

只是也许。虽然它可以被认为更干净一些,并且使您的回调金字塔更平坦一些,但它并没有对代码进行太多改进:

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};
});
}

I'm wondering if this approach is correct

对于数据库连接,您可能需要查看 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 的对象的 Promise 是一种不好的做法,你最好这样做

….catch(function(error) {
error.queryRequest = queryRequest;
throw error;
})

或原始模式中的等效内容。

关于javascript promise 池化连接并执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31117414/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com