Javascript bluebird.js P和Promise globals不可用

Javascript bluebird.js P和Promise globals不可用,javascript,dojo,promise,bluebird,Javascript,Dojo,Promise,Bluebird,我已经包括了bluebird.js脚本,如下所示: 所以现在我期待着: 全局变量Promise和p(Promise的别名)变为 在上面的脚本标记之后可用 但是,通过检查全局Promise变量,我发现这是本地Chrome实现,而不是bluebird Promise。嗯,不覆盖本机实现似乎是合乎逻辑的。但仍然没有蓝鸟的全局P变量。为什么呢 我尝试的另一个选择是使用: var prom = require("bluebird"); 但当我尝试请求时,它显示“Error:unfinedmodule”

我已经包括了bluebird.js脚本,如下所示:

所以现在我期待着:

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

但是,通过检查全局Promise变量,我发现这是本地Chrome实现,而不是bluebird Promise。嗯,不覆盖本机实现似乎是合乎逻辑的。但仍然没有蓝鸟的全局P变量。为什么呢

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

var prom = require("bluebird");
但当我尝试请求时,它显示“Error:unfinedmodule”。一个可能的原因是我使用的是dojo,它有自己的带有define/require函数的模块加载器。所以这可能是某种名称冲突


所有这些之后,主要的问题仍然存在-当全局变量(Promise和p)不存在,并且require不起作用时,我如何使用bluebird promises?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>

var oldReq=需要;
要求=未定义;
require=oldReq;
oldReq=未定义;

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


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

您是否将bluebird.js文件放在了自己的服务器上?您是否100%确定您的
标记URL正确指向您的bluebird.js副本?听起来你的脚本标记没有正确加载库。是的,我正在从本地文件夹加载它。在开发工具中,我可以看到脚本加载正确。一个小的(但重要的)补充-我需要对“define”函数执行相同的操作,否则它将无法工作。这样做之后,这个解决方案似乎奏效了。我是否正确地理解了bluebird将方法添加到本机Promise对象?这不是在以后引入了一些兼容性问题吗?@andree否,它没有向本机承诺对象添加属性,而是创建了自己的承诺对象-没有兼容性问题:)可怕和geniusIt抛出“错误:未定义模块”