【发布时间】:2026-01-24 17:35:01
【问题描述】:
我正在努力用 MySql 实现 Bluebird 的承诺。我想我已经接近了,但我的问题开始复杂化,我可以使用一些帮助回到正轨。我让这段代码都使用回调,但我已经用 Promise 提升了它。
目前的问题是它不喜欢我查询中的“then”,如:
conn.query("DO DB STUFF").then(function(result){});
首先,我有一个如下所示的 connection.js 文件。我在代码中添加了一些 cmets。
(function () {
var mysql = require("mysql");
var pool = mysql.createPool({
connectionLimit: 10,
host: "localhost",
user: "myuser",
password: "password",
database: "dbName"
});
// stole this from http://*.com/questions/24797314/how-will-a-promisified-mysql-module-work-with-nodejs
exports.getConnection = function(){
return pool.getConnectionAsync().disposer(function(connection){
try{
connection.release();
} catch (e) {}
});
};
})();
然后我有一个看起来像这样的“db access”文件:
var Promise = require("bluebird");
Promise.promisifyAll(require("mysql/lib/Connection").prototype);
Promise.promisifyAll(require("mysql/lib/Pool").prototype);
var connection = require("./connection");
var common = require("../../domain/common");
exports.isKnownBadTicker = function (stockSymbol) {
if (stockSymbol == null) { return false; }
else {
var ticker = common.standardizeStockSymbol(stockSymbol);
var query = "SELECT COUNT(*) AS count FROM BadTicker WHERE Symbol = '" + ticker + "';";
// it doesn't like the conn.query(query).then . . . says that "then" is not valid, and so I tried to just return the response of the query - which also doesn't work.
Promise.using(connection.getConnection(), function (conn) {
return conn.query(query)[0]["count"] > 0;
// conn.query(query).then(function (result) {
// return result[0]["count"] > 0;
// });
});
}
};
我觉得我已经很接近了,但我就是不能把它放在一起。谁能帮我解决这个问题?
另外,我不确定我是否做对了其他一些事情,例如,我可以在一个也返回 Promise 的函数中返回一个布尔值吗?如果您发现我已经变得很古怪,请随时纠正我。任何帮助表示赞赏。
维克
【问题讨论】:
-
您认为
Promise.promisifyAll(require("mysql/lib/Connection").prototype);完成了什么?您没有保存require()操作的任何返回值,所以我想知道您认为此操作的结果是什么? -
从这里获取代码:github.com/petkaantonov/bluebird/blob/master/…。显然,这并不意味着我使用正确。
标签: javascript mysql node.js bluebird