如何使用事务内部循环来运行多个存储过程?
使用Nodejs和
我有多个存储过程,并希望异步运行,因为即将到来的迭代取决于之前的结果。
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) {
transactionmit(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:无法获取请求的连接。有另一个请求正在进行中。
transactions.forEach
每次迭代应适用于request.execute
的结果(回调)
最简单的选择是使用异步等待(https://www.npmjs/package/mssql#asyncawait)
然后您可以执行以下操作:
async function doWork() {
let count = 0;
for(const transaction of transactions) {
const result = await execute(...);
count++;
}
}