async-await - 将 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?整体结构,我们返回 knex.schema 并带有一系列 promise 方法,这让我陷入了循环。
解决方案
这样的事情应该做:
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');
}
推荐阅读
- python - Pyinstaller 3.3.1 & 3.4.0-dev 使用 apscheduler 构建
- android - 错误的 RSA PrivateKey KeyStore
- cakephp - 验证未编辑的属性
- jquery - Angularjs + jquery bootstrap-datepicker委托在第一次点击时不触发
- mongodb - 创建spring mvc mongodb项目时注入依赖项的自动装配失败
- python-3.x - 使用 PyWaffle 模块和 FontAwesome 使用 Matplotlib 创建华夫饼图
- mysql - GROUP BY 和 DISTINCT 之间的区别,没有聚合函数
- sql - 使用 where 过滤总数
- javascript - Css 和 JS 中的旋转
- php - 使用 Yii2 框架的 Ajax 请求太慢