Knex使用迁移文件来应用或回滚数据库结构更改。例如,要创建新的迁移文件,可以使用cli:
knex migrate:make migration_name
这会在/migrations
目录中生成一个包含以下内容的文件:
exports.up = function(knex, Promise) {
};
exports.down = function(knex, Promise) {
};
我的问题是,为什么这会将Promise
作为参数传递?我看到knex大量使用Bluebird和passes Promise
to the migration。那么,这是否是前任Promise
无处不在的遗迹?或者......是否故意覆盖es6实现,以便它可以使用非标准方法,如tap
和spread
?
非常感谢任何清晰度。
答案 0 :(得分:1)
如果我没记错的话,最初是在那里添加的,因为es5
没有全局Promise
对象。
这不是一个记录在案的功能,但目前传递给迁移脚本的Promise
是bluebird
承诺(https://github.com/tgriesser/knex/blob/master/src/migrate/index.js#L327)。
但是,对于未来兼容性,最安全的选择是从bluebird
导入承诺,而不是使用传递给迁移的承诺,如果您想使用bluebird
中的特殊功能。
答案 1 :(得分:-1)
promises的主要好处是能够捕获抛出的错误而不会崩溃节点应用程序,使得代码在同步代码中的行为类似于.try / .catch /。最终。
knex.select('name')
.from('users')
.where('id', '>', 20)
.andWhere('id', '<', 200)
.limit(10)
.offset(x)
.then(function(rows) {
return _.pluck(rows, 'name');
})
.then(function(names) {
return knex.select('id').from('nicknames').whereIn('nickname', names);
})
.then(function(rows) {
console.log(rows);
})
.catch(function(error) {
console.error(error)
});