【发布时间】:2021-06-27 18:05:22
【问题描述】:
好的,需要一些帮助。
在 node js 和 mysql 上有一个应用程序。我不完全了解连接的行为。
这是我的代码(部分)。
let connection = mysql.createConnection({
host: "localhost",
database: "mans",
user: 'root',
password: '',
}).promise();
let results = [
// array of objects
];
await Promise.all(
results.map(r=>{
return connection.query("UPDATE `table` SET `name` = ?, WHERE `id` = ?", [r.name, r.id]).then(r=>{
console.log('end iteration');
}).catch(err=>{
console.log('err: ', err);
});
})
)
现在,当map 函数启动时(当然是 aync,正如预期的那样),然后query 就像简单的同步函数一样工作!好吧,也许是因为我没有使用游泳池。所以我重写了。
let pool = mysql.createPool({
connectionLimit: 100,
host: "localhost",
database: "mans",
user: 'root',
password: '',
}).promise();
let results = [
// array of objects
];
await Promise.all(
results.map(r=>{
return pool.getConnection().then(connection=>{
console.log('opened connection');
return connection.query("UPDATE `table` SET `name` = ?, WHERE `id` = ?", [r.name, r.id]).then(r=>{
connection.release();
console.log('end iteration');
return;
}).catch(err=>{
console.log('err: ', err);
});
}).catch(err=>{
console.log('err: ', err);
});
})
)
打开连接事件异步触发并成功,但更新仍然相互等待。我做错了什么?
【问题讨论】:
-
好的,一些更新。尝试使用
START TRANSACTION和COMMIT命令。在我的本地 Windows 服务器上它可以工作,所有操作都异步了。没有它,它是同步的。但它不适用于 Ubuntu 18.04 和 mysql 5.7 的服务器。操作仍然同步。更新后更新。检查引擎,它是InnoDB
标签: mysql node.js asynchronous