如何支持 Internet Explorer 11的承诺?

我有一个简单的代码,除了 Internet Explorer 11之外,每个浏览器都能完美运行。我怎样才能让它在所有浏览器上工作?

Codepen

'use strict';


let promise = new Promise((resolve, reject) => {


setTimeout(() => {
resolve("result");
}, 1000);
});


promise
.then(
result => {
alert("Fulfilled: " + result);
},
error => {
alert("Rejected: " + error);
}
);
169408 次浏览

如果你想让这种类型的代码在 IE11中运行(它根本不支持 ES6) ,那么你需要一个第三方承诺库(如 青鸟) ,包含这个库,并改变你的代码使用 ES5编码结构(没有箭头函数,没有 let,等等。.)所以你可以生活在老式浏览器支持的范围之内。

或者,您可以使用传输器(如 巴别塔)将 ES6代码转换为可以在较老的浏览器中工作的 ES5代码。

以下是使用 Bluebird 承诺库以 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>

你可以试试填充物。下面这篇文章发表于2019年,它为我解决了这个难题。它为窗口对象分配了  种函数。

比如: window.Promise Https://www.npmjs.com/package/promise-polyfill

如果你想要更多关于填充物的信息,请查看下面的 MDN 网络文档 Https://developer.mozilla.org/en-us/docs/glossary/polyfill