我已经包含了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)不存在时,我如何使用蓝鸟承诺,并且要求不起作用?
答案 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")
应该有效。