- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Node 中的 promise 方面遇到了问题,特别是在下面的代码中,我编写这些代码是为了执行 MySQL 查询,以便我的所有其他 100 多个函数可以共享它,而不是内联编写它。来自 PHP 开发,了解 Promise 等的好处是一个学习曲线,现在我遇到了一些问题。以下函数将 query
作为参数,执行它并返回响应:
var mysql = require('mysql');
const myDBConnection = mysql.createPool({
host: '127.0.0.1',
user: "username",
password: "password",
database: "dbName",
connectionLimit: 101,
});
class DBQueryRunner {
query(query) {
return new Promise((resolve, reject) => {
myDBConnection.getConnection((err, connection) => {
const myQuery = mysql.format(query.string, query.params);
connection.query(myQuery, function(err, data) {
return (err ? reject(err) : resolve(data));
connection.release();
});
});
});
}
}
代码运行良好,并且值返回给调用者,但无论我尝试什么,它似乎都不会终止,而且我担心它会占用 CPU 资源。
这是一个示例函数,您可以在命令行中运行它与上面的函数一起使用,以查看发生了什么。
function test() {
let DBQueryRunner = require("./theAboveCode.js");
const myDB = new DBQueryRunner();
let query = {
string: `SELECT 1+1 AS Output`,
params: []
};
return myDB.query(query).then(rows => {
console.log(rows)
return (rows);
});
}
问题:
- promise 是否有必要终止?
- 我的代码有错误吗?
- 有没有更好的方法来制作像我这样的可重用的数据库执行函数?
更新 - 我还尝试了使用 Bluebird 来“ promise ”mysql 库的替代方法。该函数仍然永远不会结束,我必须在终端中按 CTRL+C 才能退出它。
let mysql = require('mysql');
let Promise = require('bluebird');
Promise.promisifyAll(require("mysql/lib/Connection").prototype);
Promise.promisifyAll(require("mysql/lib/Pool").prototype);
let myDBConnection = mysql.createPool({
host: '127.0.0.1',
user: "username",
password: "password",
myDBConnection: "dbName",
connectionLimit: 101,
});
class DBQueryRunner {
query(query) {
let pool = Promise.promisifyAll(mysql);
return myDBConnection.getConnectionAsync()
.then(function (conn) {
myDBConnection = Promise.promisifyAll(conn);
return myDBConnection.queryAsync(query.string, query.params);
})
.then(function (results) {
if (results.length < 1) {
return "No results were found";
} else {
return results;
// resolve(results); //This method doesn't work with resolve/reject so I already am confused by it.
}
})
.catch(function (err) {
console.log(err);
throw err;
})
.finally(function () {
if (myDBConnection) {
myDBConnection.release();
console.log("Released the connection")
}
});
}
}
最佳答案
我找到了解决我的问题的解决方案。
使用connection.destroy()
允许函数正确结束,因此它们不再导致“挂起”。
我在原始帖子中发布的两组代码确实有效,因此将来可能会对其他人有所帮助。
关于javascript - Node MySQL—— promise 永无止境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42350810/
下面的代码永远不会结束。这是为什么? #include #include #include #define SIZE 5 int nums[SIZE] = {0, 1, 2, 3, 4}; in
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我在 Node 中的 promise 方面遇到了问题,特别是在下面的代码中,我编写这些代码是为了执行 MySQL 查询,以便我的所有其他 100 多个函数可以共享它,而不是内联编写它。来自 PHP 开
我需要从表中删除重复项,同时保留一项。由于在 where 语句内的子查询中访问同一个表时无法从表中删除,因此我决定将受影响的 ID 存储在临时表中: create temporary my_temp_
我有以下 json 对象: "comments": [ {"username": "test", "comment": "This is a comment", "child": [
我正在尝试学习如何使用 hadoop 流。我正在尝试运行一个非常简单的映射器,并且没有缩减器。当我运行该程序时,它完成了 100% 的 map task ,然后在十分钟内什么都不做,然后报告它已完成所
我正在为 git 可执行文件创建一个简单的 Java 包装器,我想在我的应用程序中使用它。一个小代码示例: public static void main(String[] args) {
我正在学习react.js,并且我使用安装了react-tools的npm。但是在我输入命令: jsx --watch src/build/后,我对 jsx 文件做了一些更改。控制台日志: app.j
今天我下载了 Visual Studio 2012 的更新 4。我已经从Microsoft网站下载了文件VS2012.4.exe。我已从命令行“VS2012.4.exe/layout”运行此文件。这已
有时,在我搜索某些内容(或不小心单击“搜索定义”)后,主要是在 PHP 文件中,VS 开始永无止境的(运行蓝线)搜索(并且我在此期间听到 CPU 负载)。但是,我不能取消那个,没有 Esc 和 Ctr
我在 MySQL 上遇到性能问题。数据库包含大约40万条记录,站点在Drupal上运行,所有列都有索引。不幸的是,有些广告没有所有数据,所以我需要使用 LEFT JOIN 而不是 INNER JOIN
我是一名优秀的程序员,十分优秀!