将promise polyfill添加到ES6

时间:2015-12-16 08:31:24

标签: javascript reactjs promise ecmascript-6

我有一个用ES6编写的React项目。它是使用Babel编译的,效果很好。除了一个承诺(很多!)只在IE中起作用,我已经知道 - 不支持承诺。所以我立即想添加一个polyfill来为IE提供承诺,但后来我就像#34;坚持,你已经在编写ES6并且不能编译成ES5了吗?"谁会比SO更了解?
那么在我的项目中添加es6-promise之类的polyfill是否有任何意义?如果有,我应该如何在语法上使用它?现在我只有导入但我应该以某种方式实现它?

    private void handleIntent(Intent intent){
    if(intent.getAction().equals(Intent.ACTION_SEARCH)){
        doSearch(intent.getStringExtra(SearchManager.QUERY));
    }else if(intent.getAction().equals(Intent.ACTION_VIEW)){
        getPlace(intent.getStringExtra(SearchManager.SUGGEST_COLUMN_TEXT_1));
    }
}

这也是导致IE出现问题的承诺,也许我有一个语法错误,我没有注意到自己! :)

import Promise from 'es6-promise';

3 个答案:

答案 0 :(得分:11)

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

    dim FF as form
    set FF = new Form_MyForm
    FF.Visible = True

然后在我的主JS文件中,justed称之为

npm install --save es6-promise //first install as a dependency & then added in broswerify as dependency.

从此处https://github.com/stefanpenner/es6-promise#auto-polyfill

基本上,它的替代语法

   import "es6-promise/auto";

基本上,在引擎盖下 polyfill()方法会在调用时修补全局环境(在本例中为Promise名称)。

注意:我在浏览器中使用了gulp。

答案 1 :(得分:1)

我之前在离线时收到评论评论时无法编辑我之前的回复...根据评论反馈重新发布包含嵌入信息的回复。感谢。

为什么不在任何地方使用bluebird?它的faster than the native promises。而且polyfills for IE也是。我不为他们工作:)。

修改

使用bluebird而不是本机承诺 -

const Promise = require('bluebird');

1.增加了性能比较 -

results for 10000 parallel executions, 1 ms per I/O op

file                                     time(ms)  memory(MB)
callbacks-baseline.js                         232       35.86
promises-bluebird-generator.js                235       38.04
promises-bluebird.js                          335       52.08
promises-cujojs-when.js                       405       75.77
promises-tildeio-rsvp.js                      468       87.56
promises-dfilatov-vow.js                      578      125.98
callbacks-caolan-async-waterfall.js           634       88.64
promises-lvivski-davy.js                      653      109.64
promises-calvinmetcalf-lie.js                 732      165.41
promises-obvious-kew.js                      1346      261.69
promises-ecmascript6-native.js               1348      189.29
generators-tj-co.js                          1419      164.03
promises-then-promise.js                     1571      294.45
promises-medikoo-deferred.js                 2091      262.18
observables-Reactive-Extensions-RxJS.js      3201      356.76
observables-caolan-highland.js               7429      616.78
promises-kriskowal-q.js                      9952      694.23
observables-baconjs-bacon.js.js             25805      885.55

Platform info:
Windows_NT 6.1.7601 x64
Node.JS 1.1.0
V8 4.1.0.14
Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz × 4

<强> 2。 IE Polyfill代码 -

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

答案 2 :(得分:1)

虽然您使用的是Babel(只是拖尾而不是添加功能),但仍需要填充。

您所要做的就是安装软件包:

npm install --save es6-promise

webpack.config.js内(或者在你的webpack配置的任何地方,假设你使用的是webpack)

require('es6-promise').polyfill();

polyfill()方法将在调用时修补全局环境(在本例中为Promise名称)。有关详情,请访问https://github.com/stefanpenner/es6-promise