如何使承诺在IE11中工作

时间:2016-03-15 16:02:00

标签: javascript internet-explorer promise

我有一个简单的代码可以在除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);
    }
  );

3 个答案:

答案 0 :(得分:71)

如果您希望这种类型的代码在IE11中运行(根本不支持ES6的大部分),那么您需要获得第三方承诺库(如Bluebird),包含该库并更改您的编码使用ES5编码结构(没有箭头功能,没有let等等),因此您可以在旧浏览器支持的范围内生活。

或者,您可以使用转换器(如Babel)将您的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>

答案 1 :(得分:3)

您可以尝试使用Polyfill。以下Polyfill于2019年发布,为我带来了成功。它将Promise函数分配给窗口对象。

使用方式类似于:window.Promise https://www.npmjs.com/package/promise-polyfill

如果您想了解有关Polyfills的更多信息,请查看以下MDN网络文档 https://developer.mozilla.org/en-US/docs/Glossary/Polyfill

答案 2 :(得分:-3)

这对我来说适用于11

(function (undefined) { }).call('object' === typeof window && window || 'object' === typeof self && self || 'object' === typeof global && global || {});

polyfill.sj:https://codepureandsimple.com/polyfilling-internet-explorer-11-a715c5b3c72