更新:事实证明,这不是Babel的问题,而是之前运行的Rollup的问题。不管怎样,谢谢你的帮助,很抱歉吵闹。
我使用rollup捆绑许多模块,包括Promise多填充(故意覆盖全局Promise)。但是,rollup将Promise
识别为全局名称并进行转换
export default function Promise(fn) { ... }
...
global.Promise = Promise;
到
function Promise$1(fn) { ... }
...
global.Promise = Promise$1;
生成的代码可以工作,但我希望以下断言成立:
expect(Promise.name).to.equal('Promise');
有没有办法让rollup保持构造函数名称不变?
尝试使用rollup plugin inject并将其配置为将导入Promise从'your Promise polyfill'
添加到引用Promise
的任何文件中。这样,Rollup就不会认为需要重命名polyfill中声明的函数以避免与全局函数冲突,因为它不会意识到存在与它冲突的全局函数。
// rollup.config.js
import inject from 'rollup-plugin-inject';
export default {
// ...
plugins: [
inject({
Promise: 'your-promise-polyfill'
})
]
};
问题内容: 我找到了一个使用Promise的现有库,但是它不使用bluebird。库函数并没有bluebird喜欢或拥有的所有其他功能。如何将“正常”或“非蓝鸟”承诺转换为具有蓝鸟提供的所有其他功能的蓝鸟承诺? 我试过包装在现有的承诺,并和他们俩谁也没工作。 问题答案: 使用-它会占用所有可能的内容,例如来自其他一些实现的承诺,并将其吸收到Bluebird承诺中。 请记住,“解决”一词可能会误导您
我是一个巨大的promise链,但我意识到其中一个函数返回一个对象,该对象具有侦听器,并对回调作出反应,如 我想知道是否有一种方法可以使用promise来实现这一点,并将其转化为可选项。除了重写我的整个promise链来使用回调,没有其他选择吗?
想象一下,你是一位顶尖歌手,粉丝没日没夜地询问你下个单曲什么时候发。 为了从中解放,你承诺(promise)会在单曲发布的第一时间发给他们。你给了粉丝们一个列表。他们可以在上面填写他们的电子邮件地址,以便当歌曲发布后,让所有订阅了的人能够立即收到。即便遇到不测,例如录音室发生了火灾,以致你无法发布新歌,他们也能及时收到相关通知。 每个人都很开心:你不会被任何人催促,粉丝们也不用担心错过单曲发行。
在JavaScript的世界中,所有代码都是单线程执行的。 由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行。异步执行可以用回调函数实现: function callback() { console.log('Done'); } console.log('before setTimeout()'); setTimeout(callback, 1000)
我试着把我的头绕在可观察的物体上。我喜欢Observable解决开发和可读性问题的方式。正如我读到的,好处是巨大的。 HTTP和集合上的可观察对象似乎是直截了当的。我怎样才能把这样的东西转换成可观察的模式呢。 这来自我的服务组件,用于提供身份验证。我希望它能像Angular2中的其他HTTP服务一样工作——支持数据、错误和完成处理程序。 这里的任何帮助都将不胜感激。我唯一的替代解决方案是创建s。但
我从JS开始,实际上喜欢异步方面(来自Python),但我不确定为什么有些函数返回Promise。具体来说,下面使用的代码让我想知道返回了什么: 除了流之外,我们在之后得到的HTTP响应是一个文本块,客户端稍后会对其进行解释,以提取标题、正文和其他有趣的元素,作为HTTP内容分析的一部分。 关键是这个文本块是一块的,所以第一个已经有了整个响应——为什么JSON主体的解析是异步操作,不同于第二个?