Javascript 如何在IE11中实现承诺

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("

我有一个简单的代码,除了InternetExplorer11之外,它可以在所有浏览器上完美运行。如何使它在所有浏览器上都工作

提前谢谢

'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作为其仿真版本时)。