使用 Nodejs 和 https://www.npmjs.com/package/mssql
我有多个存储过程,并且希望异步运行,因为即将到来的迭代取决于之前的结果。
transaction.begin(async error => {
try {
let count = 0;
transactions.forEach(t => {
const request = new db.sql.Request(transaction);
request.execute(t, (error, recordsets) => {
console.log(error)
if (recordsets && recordsets.returnValue !== 0) {
transaction.rollback();
return res.status(422).json([responses[recordsets.returnValue]]);
}
if (recordsets && recordsets.returnValue === 0 && transactions.length === count) {
transaction.commit(tErr => tErr && next('transaction commit error'));
return res.status(200).json([responses[0]]);
}
});
count++;
});
} catch (err) {
transaction.rollback(
tErr => tErr && done('transaction rollback error')
);
}
});
错误:
TransactionError: Can't acquire connection for the request. There is another request in progress.
transactions.forEach
每次迭代都应该适用于request.execute
(回调)的结果
最佳答案
请检查是否有必要创建这样的新对象
const request = new db.sql.Request(transaction);
你可以通过两种方式做到这一点,但我认为为此,第一个选择是。
一个使其异步。
transactions.forEach(async t => {
和等待 request.execute(t, (错误, 记录集) => {
尝试将其写为
promise
,并使用Promise.all()
获取所有结果
https://www.npmjs.com/package/mssql#promises https://www.npmjs.com/package/mssql#asyncawait
关于javascript - 如何使用事务内循环运行多个存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58118203/