关于javascript:将promise polyfill添加到ES6

Adding promise polyfill to ES6

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

1
import Promise from 'es6-promise';

这也是在IE中引起问题的承诺,也许我有一个语法错误,但我自己没有注意到! :)

1
2
3
4
5
6
7
new SingleObjectResource(DJ_CONST.API.setLanguage)
    .put(null, {language_code: theLanguage})
    .then(
        function() {
            window.location.reload();
        }
    );


我有同样的情况


尽管您使用的是Babel(只是四处走动而不添加功能),但仍需要polyfills。

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

1
npm install --save es6-promise

内部webpack.config.js(或Webpack配置所在的任何位置,假设您使用的是Webpack)

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

polyfill()方法将在调用时修补全局环境(在本例中为Promise名称)。更多信息请参见https://github.com/stefanpenner/es6-promise


当我离线时晚上收到评论评论时,我无法更早地编辑以前的回复...根据评论反馈,将回复与嵌入信息一起重新发布。谢谢。

为什么不到处使用蓝鸟?它比本地承诺更快。还有适用于IE的polyfill。而且我不为他们工作:)。

编辑:

使用蓝鸟代替本地的承诺-

1
const Promise = require('bluebird');

1.添加了性能比较-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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代码-

1
2
3
4
5
import Bluebird from 'bluebird';
// Node
global.Promise = Bluebird;
// Browser
window.Promise = Bluebird;