为什么knex迁移示例将Promise构造函数作为第二个parameter passing?

Knex使用迁移文件来应用或回滚数据库结构更改。 要创build一个新的迁移文件,例如,可以使用cli:

knex migrate:make migration_name 

这将在/migrations目录中生成一个文件,其中包含:

 exports.up = function(knex, Promise) { }; exports.down = function(knex, Promise) { }; 

我的问题是,这是为什么将Promise作为一个论点? 我看到knex使得Bluebird内部使用量很大, 并将Promise传递给了迁移 。 那么,这就是前Promise无处不在的遗迹吗? 或者…有意识地覆盖es6实现,以便可以使用非标准方法(如tapspread

任何清晰度将不胜感激。

承诺的主要好处是能够捕获抛出的错误而不会崩溃节点应用程序,使您的代码在同步代码中的行为类似于.try / .catch / .finally。

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

请参考: http : //knexjs.org/#Interfaces-Promises

如果我记得正确它最初是因为es5没有全局Promise对象而添加的。

这不是一个文件logging的function,但现在通过迁移脚本的承诺是bluebird承诺( https://github.com/tgriesser/knex/blob/master/src/migrate/index.js#L327 )。

然而,为了将来的兼容性,最安全的select是自己从bluebird导入诺言,而不是使用传递给迁移者的诺言,如果你喜欢使用bluebird特殊function。