Javascript 如何在IE11中实现承诺
我有一个简单的代码,除了InternetExplorer11之外,它可以在所有浏览器上完美运行。如何使它在所有浏览器上都工作 提前谢谢Javascript 如何在IE11中实现承诺,javascript,internet-explorer,promise,Javascript,Internet Explorer,Promise,我有一个简单的代码,除了InternetExplorer11之外,它可以在所有浏览器上完美运行。如何使它在所有浏览器上都工作 提前谢谢 'use strict'; let promise = new Promise((resolve, reject) => { setTimeout(() => { resolve("result"); }, 1000); }); promise .then( result => { alert("
'use strict';
let promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("result");
}, 1000);
});
promise
.then(
result => {
alert("Fulfilled: " + result);
},
error => {
alert("Rejected: " + error);
}
);
如果您想在IE11中运行这种类型的代码(它根本不支持ES6),那么您需要获得一个第三方promise库(如),包括该库,并将您的编码更改为使用ES5编码结构(无箭头函数、无
let
,等等),这样您就可以在旧浏览器支持的范围内生活
或者,您可以使用transpiler(如)将ES6代码转换为可以在旧浏览器中工作的ES5代码
以下是使用Bluebird promise库以ES5语法编写的代码版本:
<script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.3.4/bluebird.min.js"></script>
<script>
'use strict';
var promise = new Promise(function(resolve) {
setTimeout(function() {
resolve("result");
}, 1000);
});
promise.then(function(result) {
alert("Fulfilled: " + result);
}, function(error) {
alert("Rejected: " + error);
});
</script>
"严格使用",;
var承诺=新承诺(函数(解析){
setTimeout(函数(){
决议(“结果”);
}, 1000);
});
承诺。然后(功能(结果){
警报(“已完成:+结果);
},函数(错误){
警报(“拒绝:+错误”);
});
您可以尝试使用Polyfill。以下Polyfill于2019年出版,为我实现了这一目标。它将Promise函数指定给窗口对象
像这样使用:window.Promise
如果您想了解有关Polyfills的更多信息,请查看以下MDN web文档
ie11没有es2015IE11,既不支持也不支持。使用JS transpiler(如)或不使用ES6功能。对于Promise支持,您可以使用类似的库。(顺便说一句,注意如何显示此代码不会在IE11以外的其他浏览器中运行。养成习惯,检查您想要使用的JS、CSS或HTML功能的支持程度。)相关如果您使用Babeljs传输代码,您可以安装“es2015 ie”预设以及“巴别塔·波利菲尔“npm模块解决了与IE的兼容性问题,并避免了一系列其他与IE相关的问题。我猜也可以使用jquery.deffered,jquery.deffered可能来自i.e.6+,这也是为什么jquery会出现deffered的原因,因为jquery是一个非常流行和有用的库,而且在包含JS内容的大型项目中有很多次,其中大多数,如果他们正在使用库,那么他们也将主要使用Jquery。因此,您不需要向项目中添加其他依赖项,您可以成为团队领导/项目经理happier@ShreyanMehta-是的,可以使用jQuery承诺(及其非标准实现)代替ES6承诺语法,但OP似乎在询问如何使用
new promise()
这不是jQuery支持的语法。其他promise库(如Q)也可以这样说,它们与较旧的浏览器兼容,但有自己的非标准语法。@ShreyanMehta我不会只为http请求包含jQuery。如果像Bluebird或Axios这样更小、更专注的库更好的话,这将是一个很大的负担。我不认为现在有人会比其他库更喜欢jQuery,除非这个项目已经将jQuery用于所有事情了。@elliottregan好吧,这对我来说是一个很好的学习。感谢您的反馈。let
和const
在ie11中可用,但不用于for循环。它是ei11实际支持的唯一es6功能之一。(使用有限的Map
和Set
以及其他一些杂项功能)这有助于为win forms WebBrowser控件添加承诺支持(当Windows使用IE 11作为其仿真版本时)。