【发布时间】:2021-08-28 15:48:34
【问题描述】:
我曾尝试用 JavaScript 编写 SQL-Transaction,但偶然发现了两个我似乎无法弄清楚的问题。
a) 这总是给我一个UnhandledPromiseRejectionWarning。我只是不知道自己做错了什么,也不知道如何正确处理带有承诺的错误。在每个 .then() 之后捕获它们也没有奏效
b) 有没有办法在交易中获得临时结果,以便我可以让我的 result.insertId 工作?我仍然希望在每次查询后回滚。
return db.promise().query("START TRANSACTION") // db is a sql pool
.then(() => {
return db.promise().query(
SqlString.format(
`INSERT INTO Standort (Street, Number, City, PLZ)
VALUES('${street}',${number},'${city}',${plz})`
)
)
})
.then ((result) => {
console.log("first result: " + result.insertId);
return db.promise().query(
SqlString.format(
`INSERT INTO Table1 (Table1ID)
VALUES(${result.insertId})`
)
)
})
.then((result) => {
return db.promise().query(
SqlString.format(
`INSERT INTO Table2 (Name, Table2ID)
VALUES('${vorname}', ${result.insertId})`
)
)
})
.then((result) => {
return db.promise().query(
SqlString.format(
`INSERT INTO Table3 (Email, Table3ID)
VALUES( '${email}',${result.insertId})`
)
)
})
.then((result) => {
return db.promise().query("COMMIT");
})
.catch((error) => {
console.log(error);
db.promise().query("ROLLBACK");
db.promise().query("RELEASE");
}
);
【问题讨论】:
-
@Bravo 所以你的意思是没有办法在两者之间得到结果?
-
@Bravo 好的,如果我在每个
db.promise().query(..之前运行 return 并将db.promise().query("COMMIT");移动到它自己的 .then() 它仍然没有给我查询结果并抛出 UnhandledPromiseRejectionWarning -
对不起,恐怕我不明白..我究竟需要把等待放在哪里?请您把您的建议作为答案吗?
-
引用前面的每一个查询结果,所以每一个结果都传入
.then -
是的,第一个结果已经是未定义的。错误是
sqlMessage: "Unknown column 'undefined' in 'field list'"
标签: javascript sql promise transactions