我可以通过bluebird在节点全局范围内的实现来覆盖ES6的Promise吗?

时间:2016-06-08 17:09:05

标签: javascript node.js promise override bluebird

我想使用bluebird实施Promise/A+开放标准并覆盖native ES6 Promises。我还希望bluebird实现在我随后导入的模块中随处可用,而不必在每个模块中都需要它。 Bluebird的Getting started页面告诉我:

var Promise = require("bluebird");

,这会导致覆盖本机Promise元素。因为bluebird是规范的超集,所以它不会破坏现有代码,因此可以安全使用。

但是,因为我知道这被认为是不好的做法:

  1. 扩展或替换语言原生语,
  2. 定义全局变量以在依赖于它的需求链中使用
  3. ,当我想将它包含在节点应用程序的基本脚本中时,我很谨慎:

    import Promise from 'bluebird';
    global.Promise = Promise;
    

    这是一种不好的做法吗?我应该坚持在每个文件中导入蓝鸟吗?

1 个答案:

答案 0 :(得分:17)

在过去的4年里,我已经在我的代码中完成了数百次这样的事情,因此在每月1000万次下载中有很多其他的。

正式支持将本机实现与bluebird交换。

我做

const Promise = require("bluebird");

基于每个文件。请注意,您通常可以宣传您的API一次,然后通常避免拨打Promise - 最多拨打.resolve