Я пытаюсь выполнить транзакции mysql, используя knex в узле js. Мои транзакции SQL выглядят так
1- Проверьте, существует ли название компании, если да, то выведите сообщение об ошибке и сделайте откат транзакции.
2- Проверьте, существует ли адрес электронной почты, если да, то выведите сообщение об ошибке и сделайте откат транзакции.
3- Вставить в таблицы user, company и userroles и, если произошла ошибка, откат транзакции.
Теперь я наблюдаю, что если ошибка возникает внутри вложенного, то особенно последнего, тогда транзакция не откатывается, а фиксирует предыдущие транзакции.
Вот мой код функции
return knex.transaction(function(t){
return knex('company').where({ companyname: companyname }).select('companyid')
.then(function(rows){
if(rows.length >= 1)
return Promise.reject('company already exist');
return knex('Users').where({email: emailaddress}).select('userid')
})
.then(function(rows){
if(rows.length >=1 )
return Promise.reject('user already exist');
return knex('Users').insert({username:username,email:emailaddress,passsword:password,creationtime:'2008-11-11 13:23:44',updationtime:'2008-11-11 13:23:44'},'userid')
})
.then(function(useridreturned){
userid=useridreturned;
return knex('company').insert({companyname:companyname,companytokens:100})
})
.then(function(companyidreturn){
companyid=companyidreturn;
return knex('userroles').insert({userid:userid[0],roleid:1,companyid:companyid[0]},'userrolesid')
})
.then(function(result){
return Promise.resolve('Account Created');
})
.then(t.commit)
.catch(t.rollback)
})
Я что-то здесь не так делаю?