Mil*_*iez 3 sequelize.js umzug sequelize-cli
这个简单的测试代码:
return queryInterface.createTable('tadam', {id: Sequelize.INTEGER, humus: Sequelize.STRING(255)})
.then(queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)'));
Run Code Online (Sandbox Code Playgroud)
返回以下错误:
Unhandled rejection SequelizeDatabaseError: relation "tadam" does not exist
Run Code Online (Sandbox Code Playgroud)
现在,据我所知,当第二个承诺(关于改变表格)被执行时,该表尚未创建.
这可能不是因为迁移中的所有查询都是一次执行的,因为我有这个测试迁移:
return queryInterface.sequelize.query('ALTER TABLE tadam DROP CONSTRAINT tadam_pkey')
.then(queryInterface.removeIndex('tadam', 'tadam_pkey'));
Run Code Online (Sandbox Code Playgroud)
它工作正常.
那么,任何人都可以解释为什么第一个不起作用以及如何实现它,以便创建表+添加PK可以从单个迁移执行?
当链接需要串行执行的promise时,这是一个常见的错误.你queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)')直接传递then(),意味着它将立即运行(即在创建表之前,因为第一个承诺还没有完成).
您需要从函数返回promise,如下所示:
return queryInterface.createTable('tadam', {id: Sequelize.INTEGER, humus: Sequelize.STRING(255)})
.then(function(results) {
// results will be the result of the first query
return queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2142 次 |
| 最近记录: |