bluebird.js P和Promise全局变量不可用

时间:2014-09-11 07:41:33

标签: javascript dojo promise bluebird

我已经包含了bluebird.js脚本,如下所示: https://github.com/petkaantonov/bluebird#quick-start

所以现在我期待这个:

  

全局变量Promise和P(Promise的别名)成为   在上面的脚本标记之后可用。

但是,检查全局Promise变量,我发现这是本机Chrome实现,而不是蓝鸟承诺。好吧,这似乎是合乎逻辑的,不能覆盖本机实现。但是,仍然没有蓝鸟的全局P变量。这是为什么?

我尝试的另一个选择是使用:

var prom = require("bluebird");

但是当我尝试要求时,它会显示“Error:undefinedModule”。一个可能的原因是我正在使用dojo,它有自己的带有define / require函数的模块加载器。所以它可能是某种名称冲突。

在这之后,主要问题仍然存在 - 当全局(Promise和P)不存在时,我如何使用蓝鸟承诺,并且要求不起作用?

2 个答案:

答案 0 :(得分:2)

Bluebird假设您的模块类似节点,因此使用模块加载器。你可以欺骗它认为没有涉及模块。

这是一个围绕这个限制的黑客:

首先 - 保留require功能的备份并删除它:

var oldRequire = require;
require = null

然后,包括蓝鸟。

最后,恢复它。

var require = oldRequire

所以整个行动过程看起来像:

 <script>
     var oldReq = require;
     require = undefined;
 </script>
 <script src="bluebird.js"> </script>
 <script>
      require = oldReq;
      oldReq = undefined;
 </script>

答案 1 :(得分:0)

Bluebird确实注意到您正在使用AMD模块加载器(在您的情况下来自Dojo)并且将自己注册为模块而不定义任何全局变量。

出于某种奇怪的原因,它确实声明了"Promise"模块而不是"Bluebird"模块。使用require("Promise")应该有效。