gpt4 book ai didi

mysql - Node mysql 和 Promise

转载 作者:行者123 更新时间:2023-11-29 12:41:07 28 4
gpt4 key购买 nike

我的 Node 工作程序中有一个数据库模块。我所需要的就是让它直接,没有回调。查询方法仍然返回未定义。我想我在这段代码中做了一些非常错误的事情,但我从未在一个地方看到过 Promise 的完整实现。

db: {
init: function (parent) {
var self = this;
self.parent = parent;
self.pool = mysql.createPool({
host: self.parent.cfg['mysql']['host'].replace(/"/g, ''),
user: self.parent.cfg['mysql']['username'].replace(/"/g, ''),
port: self.parent.cfg['mysql']['port'].replace(/"/g, ''),
password: self.parent.cfg['mysql']['password'].replace(/"/g, ''),
database: self.parent.cfg['mysql']['db'].replace(/"/g, '')
});
self._query = Q.nbind(self.__query, self);
},
query: function (query, params) {
var self = this;
return self._query(query, params).then(function (rows) {
return rows;
}).catch(function(err){
return err;
}).done();
},
__query: function (query, params) {
var self = this, deferred;
deferred = Q.defer();
query = params ? mysql.format(query, params) : query;
//console.log(query);
self.pool.getConnection(function (err, connection) {
if (err) {
deferred.reject(err);
}
connection.query(query, function (err, rows) {
connection.release();
if (err) {
deferred.reject(err);
}
deferred.resolve(rows);
});
});
return deferred.promise;
}
}

deferred.promise 转储

很可能 Q.nbind 在这里不是必需的,无论如何我转储了所有内容并且 deferred.promise 是一个对象 {state: 'pending'}。所以我认为魔鬼在于 __query 函数。

已添加

query: function (query, params) {
var self = this;
return self._query(query, params).then(function (rows) {
console.log(rows);
return rows;
}).catch(function(err){
return err;
}).done();
}

它将行放入控制台,但不返回它。一个人声称这种结构有效:

function getKey(key) {
return r.get(dbkey(key)).then(function(x) {
return x && parseInt(x, 10);
});
}

再次添加

是的,删除done()是有意义的。但它仍然返回 {state: 'pending'}。问题可能出在我调用查询的方式上?

test: function () {
var self = this;
var s = self.db.query(self.testQuery);
console.log(s); // { state: 'pending' }
},

最佳答案

我相信你的问题是你如何使用 Q.nbind。它适用于创建 Node 样式回调函数(错误、结果...您正在使用 deferred 在 __query 函数中处理这个问题。所以我认为你应该直接使用 __query 就可以开始工作了。当我回到我的计算机上时,我会发布一个代码示例。

关于mysql - Node mysql 和 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26109638/

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