如何使用Promise进行knex.js迁移然后

时间:2016-05-23 12:51:43

标签: javascript promise knex.js

我仍然不确定如何使用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顺序实现迁移。

0 个答案:

没有答案