bluebird.js P和Promise全局变量不可用
bluebird.js P and Promise globals not available
我已经包含了bluebird.js脚本,如下所示:https://github.com/petkaantonov/bluebird#quick-启动
所以现在我期待这个:
全局变量Promise和p(Promise的别名)变为在上面的脚本标记之后可用。
但是,检查全局Promise变量,我发现这是原生Chrome实现,而不是bluebird Promise。不覆盖本机实现似乎是合乎逻辑的。但是,蓝鸟的全局P变量并没有出现。为什么?
我尝试的另一个选择是使用:
var prom = require("bluebird");
但当我尝试要求时,它显示"错误:undefinedModule"。一个可能的原因是我使用的是dojo,它有自己的带有define/require函数的模块加载器。所以这可能是某种名称冲突。
在所有这些之后,主要的问题仍然存在-当全局变量(Promise和p)不存在,并且require不起作用时,我如何使用bluebird Promise
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>
Bluebird确实注意到您正在使用AMD模块加载程序(在您的案例中来自Dojo),并且在不定义任何全局变量的情况下将自己注册为模块。
然而,由于一些奇怪的原因,它确实声明了"Promise"
模块而不是"Bluebird"
模块。使用require("Promise")
应该可以。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- javascript隐式全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 如何使全局变量仅特定于该文件
- 在page.open()-PhantomJS中无法访问全局变量
- 使用全局变量来存储数字(JavaScript)
- 如何将变量声明为全局变量
- 在节点中创建文件全局变量
- 在Javascript中使用全局变量作为缓存是很好的
- 创建要在其他函数中使用的全局变量
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 函数中的innerHTML(全局变量?)
- 如何将从$promise返回的数据分配给全局变量
- bluebird.js P和Promise全局变量不可用
- 使用promise中的数据更新angular2View/全局变量