Не рекомендуется, поскольку он может оставаться в бесконечном цикле, но он должен работать с использованием рекурсии:
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()
});
}