代码之家  ›  专栏  ›  技术社区  ›  Boris K

在knex迁移中使用async/await

  •  0
  • Boris K  · 技术社区  · 7 年前

    我使用knex迁移和常规的promise方法,例如:

    exports.up = function (knex) {
        return knex.schema
            .hasTable('table_name')
            .then(function (exists) {
                if (!exists) {
                    return knex
                        .schema
                        .createTable('table_name', function (table) {
                            table.increments('id').primary();
                        })
                        .then(console.log('created table_nametable'));
                }
            });
    };
    

    如何重构它以使用async/await?总的结构是,我们返回knex.schema和一系列的promise方法,这是一个循环。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Lin Du Correcter    7 年前

    像这样的事情应该可以:

    exports.up = async function (knex) {  
        if (! (await knex.schema.hasTable('table_name')) ) {
          await knex.schema.createTable('table_name', function (table) {
            table.increments('id').primary();
          });
        }
    
        // awaiting sequentially multiple promises to resolve one by one
        for (let item of arrayOfStuffToAwait) {
          await item;
        }
    }
    
    exports.down = async function (knex) {  
      await knex.schema.dropTable('table_name');
    }