【发布时间】:2019-10-14 07:52:04
【问题描述】:
查询执行出错
var records = [{name:'John',age:24},{name:'Sarah',age:28},{name:'Linda',age:23}];
connection.getSession().then(session => {
async function insertRecords() {
await Promise.all(records.map(async function (element) {
let util = {};
util['name'] = element['name'];
util['age'] = element['age'] || null;
let query = `INSERT INTO users SET
name =?,
age=?
ON DUPLICATE KEY UPDATE
name=VALUES(name),
age=VALUES(age)`;
session.sql(query).bind([util.name, util.age]).execute()
.then(() => {})
.catch((error) => {
console.error('cannot execute the query');
console.error('error', error);
});
}))
}
insertRecords()
.then(data => console.log('data', data))
.catch(err => console.log('err', err))
}).catch((err) => {
console.error(err);
session.close();
});
我在执行时收到以下错误。
{ 严重性:0, 代码:5015, sqlState: 'HY000', msg: '参数太多' } }
【问题讨论】:
-
这是您的查询错误,而不是
async/await,对吧? -
如果我在工作台中执行查询似乎工作正常
-
我从未见过 VALUES( 在 ON DUPLICATE KEY UPDATE 命令之后的语法。我无法告诉你为什么它在工作台中有效,但在节点中无效,但无论如何尝试删除它。
-
查询看起来不错。但是,正如现有答案所指出的那样,异步处理存在一些问题。您使用的是什么版本的驱动程序?我无法重现这种行为。按原样使用您的代码 sn-p(使用具有有效架构的现有表)只会返回
data undefined。考虑到异步处理问题,这是有道理的。免责声明:我是 MySQL Node.js X DevAPI 驱动程序主管开发人员。
标签: mysql node.js asynchronous promise async-await