如何在 Internet Explorer 11 中支持Promise

IT技术 javascript internet-explorer promise internet-explorer-11 polyfills
2021-02-01 08:59:18

我有一个简单的代码,可以在除 Internet Explorer 11 之外的所有浏览器上完美运行。如何使其在所有浏览器上运行?

代码笔

提前致谢。

'use strict';

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

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

promise
  .then(
    result => {
      alert("Fulfilled: " + result);
    },
    error => {
      alert("Rejected: " + error);
    }
  );
2个回答

如果您希望这种类型的代码在 IE11 中运行(它根本不支持很多 ES6),那么您需要获得一个 3rd 方Promise库(如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>
@ShreyanMehta 我不会只为 http 请求包含 jQuery。如果像 Bluebird 或 Axios 这样更小、更专注的库会更好,那会带来很多负担。我认为现在没有人应该更喜欢 jQuery 而不是其他库,除非该项目已经在所有方面都使用 jQuery。
2021-03-16 08:59:18
let并且const在 ie11 中可用,当不在 for 循环中使用时。它是 ei11 实际支持的唯一 es6 功能之一。(具有有限的MapSet其他一些杂项功能)
2021-03-19 08:59:18
@ShreyanMehta - 是的,可以使用 jQuery Promise(及其非标准实现)代替 ES6 Promise语法,但 OP 似乎在询问使用new Promise()哪种语法不是 jQuery 支持的。对于其他与旧浏览器兼容但有自己的非标准语法的Promise库(例如 Q),也可以这样说。
2021-03-27 08:59:18
我想也可以使用 jquery.defered,jquery.deffered 可能从 ie 6+ 开始支持,这也是为什么 jquery 延迟的原因,因为 jquery 是一个非常流行和有用的库,并且很多时候在包含 JS 内容的大型项目中,其中大部分,如果他们使用库,那么他们也将主要使用 Jquery。这样您就不会被要求向您的项目添加另一个依赖项,并且可以让您的团队负责人/项目经理更快乐
2021-03-31 08:59:18
@elliottregan 好的,这对我来说是一个很好的学习。感谢您的反馈。
2021-04-14 08:59:18

您可以尝试使用 Polyfill。以下 Polyfill 于 2019 年发布,对我有用。它将 Promise 函数分配给 window 对象。

使用如下:https : window.Promise //www.npmjs.com/package/promise-polyfill

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

这有助于为 win 表单 WebBrowser 控件添加Promise支持(当 Windows 使用 IE 11 作为其仿真版本时)。
2021-03-30 08:59:18