我仍然不确定如何使用knex进行迁移。
我最近刚刚开始这个,而且我一般没有接受Promise的经验。我试过以下,但没有用。
案例1
exports.up = (knex, Promise) => Promise.all([])
.then(() => {
// Create custom type
knex.raw("CREATE TYPE a AS ENUM ('a1', 'a2', 'a3', 'a4')");
knex.raw("CREATE TYPE b AS ENUM ('b1', 'b2', 'b3', 'b4')");
}).then(() => {
// Create table dependent on custom type
knex.schema.createTable('table1', (table) => {
table.increments('id').primary();
table.specificType('ace', 'a').defaultTo('a1').notNullable();
table.specificType('bee', 'b').defaultTo('b1').notNullable();
}
}).catch((error) => {
console.error(error);
});
和
案例2
exports.up = (knex, Promise) => Promise.then((resolve, reject) => {
// Create custom type
knex.raw("CREATE TYPE a AS ENUM ('a1', 'a2', 'a3', 'a4')");
knex.raw("CREATE TYPE b AS ENUM ('b1', 'b2', 'b3', 'b4')");
return knex;
}).then((knex) => {
// Create table dependent on custom type
knex.schema.createTable('table1', (table) => {
table.increments('id').primary();
table.specificType('ace', 'a').defaultTo('a1').notNullable();
table.specificType('bee', 'b').defaultTo('b1').notNullable();
}
return knex;
}).catch((error) => {
console.error(error);
});
现在,您可能会问为什么在为knex api提供时创建特定的枚举。原因是knex不支持Postgres的本机枚举,而是使用约束来实现枚举,这不是所期望的。 (来源:https://github.com/tgriesser/knex/issues/394)
对于案例1,我认为它有效,直到我意识到.then
中的所有内容都没有被执行。案例2,我被告知Promise.then不是一个令人困惑的函数,因为我认为Promise(即使在Bluebird的实现中)也有then
作为方法。
因此,我对如何实现这一点感到茫然。我想了几天,但由于我最近遇到了Promise,没有时间真正深入研究它,我希望你能告诉我如何使用Promise顺序实现迁移。