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 |
内部
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; |