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

bluebird.js P and Promise globals not available

本文关键字:全局变量 Promise js bluebird      更新时间:2023-09-26

我已经包含了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")应该可以。