Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向ES6中添加promise polyfill_Javascript_Reactjs_Promise_Ecmascript 6 - Fatal编程技术网

Javascript 向ES6中添加promise polyfill

Javascript 向ES6中添加promise polyfill,javascript,reactjs,promise,ecmascript-6,Javascript,Reactjs,Promise,Ecmascript 6,我有一个用ES6编写的React项目。它是用巴别塔编译的,运行得很好。除了一个承诺(许多承诺中的一个!)只在IE中起作用,对此我已经知道了——不支持承诺。所以我立即想添加一个polyfill来为IE提供承诺,但接着我就想“等等,你已经在写ES6了,这不是已经编译成ES5了吗?”谁会比这更清楚呢? 那么,在我的项目中添加一个polyfill(例如)有什么意义呢?如果有,我应该如何在语法上使用它?现在我只有导入,但我可能也应该以某种方式实现它 import Promise from 'es6-pro

我有一个用ES6编写的React项目。它是用巴别塔编译的,运行得很好。除了一个承诺(许多承诺中的一个!)只在IE中起作用,对此我已经知道了——不支持承诺。所以我立即想添加一个polyfill来为IE提供承诺,但接着我就想“等等,你已经在写ES6了,这不是已经编译成ES5了吗?”谁会比这更清楚呢?
那么,在我的项目中添加一个polyfill(例如)有什么意义呢?如果有,我应该如何在语法上使用它?现在我只有导入,但我可能也应该以某种方式实现它

import Promise from 'es6-promise';
还有一个在IE中引起问题的承诺,也许我自己没有注意到语法错误!:)


我无法编辑之前的回复,因为我在离线的晚上收到了评论。。。根据审查反馈重新发布我的回复,并嵌入信息。谢谢

为什么不到处使用?它的还有。我不为他们工作:)

编辑:

用蓝知更鸟代替本地的承诺-

const Promise = require('bluebird');
1.添加了性能比较- 2。IE Polyfill代码-

import Bluebird from 'bluebird';
// Node
global.Promise = Bluebird;
// Browser
window.Promise = Bluebird;

虽然您使用的是Babel(只是traspiling,而不是添加功能),但需要使用多边形填充

您只需安装软件包:

npm install --save es6-promise
webpack.config.js内部(或者假设您正在使用webpack,则无论您的webpack配置在哪里)


调用polyfill()方法时,将修补全局环境(在本例中为承诺名称)。更多信息在

我也遇到了同样的情况&我非常沮丧,因为我不得不部署生产应用程序,我遇到的问题是fetchjs的承诺。这就是我拯救生命的方法

npm install --save es6-promise //first install as a dependency & then added in broswerify as dependency.
然后在我的主JS文件中,justed称之为

   import "es6-promise/auto";
从这里开始

基本上,它的另一种语法是

require('es6-promise').polyfill();
基本上,当调用polyfill()方法时,它会在引擎盖下对全局环境进行修补(在本例中是对Promise名称的修补)


注意:我正在使用BLOWSERIFY的GALP

Babel只将语言功能传输到ES5。您仍然需要:)只需将其放在页面顶部,不必担心导入任何内容,只需编写ES6,就像它是本地可用的一样。6 promise是一个缓慢而过时的polyfill afaik.RGraham,我会一有机会就尝试一下,但你似乎已经设法用两句话就得到了我期望的答案。非常感谢。为什么不到处使用?它的还有。我不为他们工作:)。是你制作的
SingleObjectResource
还是第三方库?您是否在控制台中遇到某种错误?如果没有,请尝试在
.then()
之后添加
.catch(函数(错误){console.log(错误);})
。这仍然不能回答问题,您是在用“使用jQuery”回答“如何选择元素”。绩效基准与手头的问题完全无关。你的比较是可以理解的,但我不同意我的评论与手头的主题无关。OP在IE上提出了一个可能的跨浏览器问题,并且正在使用另一个polyfill进行评估,该polyfill被证明比bluebird慢。我提到的替代方案不仅比本地人更快,还支持IE。与你的例子类似的论点是。。。使用jQuery而不是说querySelector,因为并非所有浏览器都支持后者。性能问题与此问题无关,浏览器兼容性问题与此无关。正如Benjamin提到的,这似乎是相关的,es6 polyfill速度慢,这是一个重要因素。OP明确要求提供使用建议。无论如何,我会让OP来决定。速度绝对是一个有效点,但是如果我成功地使用了babel,我会选择一个不包含其他库的解决方案(因为我已经在运行babel)。当然,如果我像一开始计划的那样运行
es6-promise
,那么你的帖子会更有意义,因为
es6-promise
也是一个独立的库。但你最初的帖子肯定没有给出如何准确实现bluebird,它只是指出它将很好地取代
es6 promise
——我认为这句话更适合作为评论。你如何写“require('es6-promise')。polyfill();”作为es6导入语句?您可以尝试使用
import
符号。我也有一个ES6项目,但我仍然把这一行写成ES5。
npm install --save es6-promise //first install as a dependency & then added in broswerify as dependency.
   import "es6-promise/auto";
require('es6-promise').polyfill();