这是我的伪代码:
Model.observe('after save', function (ctx, next) {
const sql = `
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- ...
COMMIT;
`
ds.connector.query(sql, function (err, res) {
if (err) {console.log(err); return next(err)}
next()
})
}
我尝试运行原始sql语句,但是db(postgres)返回s并显示错误:
代码:“ 40001”,
详细信息:“原因码:在写入过程中被识别为枢轴时被取消。”
提示:“如果重试,交易可能会成功。”
因此,如果err
中引发了ds.connector.query
,我想重新运行ds.connector.query
,而不是在Model.observe
函数的回调(next
)中发回错误>
答案 0 :(得分:0)
不建议使用此方法,因为它可以保持无限循环,但应使用递归方法:
let failCount = 0, maxTry = 3;
Model.observe('after save', function (ctx, next) {
const sql = `
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- ...
COMMIT;
`
query(sql, next);
}
function query(sql, next) {
ds.connector.query(sql, function (err, res) {
if (err) {
console.log(err);
if (failCount < maxTry) {
query(sql, next); //querying again
failCount++;
} else {
next(err);
}
}
next()
});
}