gpt4 book ai didi

sequelize.js - Sequelize 迁移中的 promise 链 - 关系不存在

转载 作者:行者123 更新时间:2023-12-04 05:22:15 25 4
gpt4 key购买 nike

这个简单的测试代码:

return queryInterface.createTable('tadam', {id: Sequelize.INTEGER, humus: Sequelize.STRING(255)})
.then(queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)'));

返回以下错误:

Unhandled rejection SequelizeDatabaseError: relation "tadam" does not exist

现在,我了解到,在执行第二个 promise (关于更改表格)时,表格尚未创建。

这不可能是因为迁移中的所有查询都是同时执行的,因为我有,f.e.本次测试迁移:

return queryInterface.sequelize.query('ALTER TABLE tadam DROP CONSTRAINT tadam_pkey')
.then(queryInterface.removeIndex('tadam', 'tadam_pkey'));

而且效果很好。

那么,任何人都可以解释为什么第一个不起作用以及我该如何实现它,以便可以从单个迁移中执行表的创建+添加 PK?

最佳答案

在链接需要串行执行的 Promise 时,这是一个常见的错误。您将 queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)') 直接传递给 then(),这意味着它将立即运行(即在创建表之前,因为第一个 promise 还没有完成)。

您需要从函数中返回 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)');
});

关于sequelize.js - Sequelize 迁移中的 promise 链 - 关系不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38303924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com