Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Knex在事务中创建mysql表_Javascript_Node.js_Promise_Knex.js - Fatal编程技术网

Javascript Knex在事务中创建mysql表

Javascript Knex在事务中创建mysql表,javascript,node.js,promise,knex.js,Javascript,Node.js,Promise,Knex.js,我正在尝试使用knex创建两个表作为事务的一部分,因此如果其中一个表的创建失败,所有内容都将回滚。文档不是很好 我遇到了两个问题。一个是,它似乎没有作为事务运行并正确回滚,因为user存在,但user1在运行此代码之前不存在,但仍会创建user1 代码也永远不会结束,所以我相信我有一个未处理的承诺,但没有得到一个错误声明 const knex = require('knex')({ client: 'mysql', connection: { host: '127.0.0.1',

我正在尝试使用knex创建两个表作为事务的一部分,因此如果其中一个表的创建失败,所有内容都将回滚。文档不是很好

我遇到了两个问题。一个是,它似乎没有作为事务运行并正确回滚,因为
user
存在,但
user1
在运行此代码之前不存在,但仍会创建
user1

代码也永远不会结束,所以我相信我有一个未处理的承诺,但没有得到一个错误声明

const knex = require('knex')({
  client: 'mysql',
  connection: {
    host: '127.0.0.1',
    user: 'root',
    password: 'pass',
    database: 'test'
  }
});

return knex.transaction(trx => {
return Promise.all([
   knex.raw('CREATE TABLE user1 (name VARCHAR(20));').transacting(trx),
   knex.raw('CREATE TABLE user (name VARCHAR(20));').transacting(trx)
  ])
 .then(trx.commit)
  .catch(trx.rollback);

}).then(()=>{
   console.log('success')
}).catch((err)=>{
    console.log('fail')
});

Mysql在每次DDL查询后都会执行隐式提交,因此无法在使用Mysql的单个事务中创建多个表

相关答案