将Async/Await与Knex迁移结合使用



我使用带有常规promise方法的Knex迁移,如下所示:

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?整体结构,我们用一系列promise方法返回knex.schema,这让我陷入了循环。

应该这样做:

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');
}

最新更新