如何使承诺在IE11中工作

Bil*_*gan 53 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);
    }
  );
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 82

如果您希望这种类型的代码在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>
Run Code Online (Sandbox Code Playgroud)

  • 我猜也可以使用jquery.deffered,可能从6+开始支持jquery.deffered,这也是为什么jquery deffered的原因,因为jquery是一个非常流行和有用的库,而且在包含JS内容的大型项目中很多时候都使用jquery,其中大多数,如果他们使用的是库,那么他们大多也会使用Jquery。这样就不需要您为项目添加其他依赖关系,并且可以使您的团队负责人/项目经理更快乐 (3认同)
  • @ShreyanMehta我不会只为http请求包括jQuery。当较小的,更集中的库(如Bluebird或Axios)更好时,这是很大的负担。我认为这些天没有人比其他库更喜欢jQuery,除非该项目已经在所有方面使用jQuery。 (2认同)
  • @elliottregan好吧,这对我来说是一个很好的学习.感谢您的反馈. (2认同)
  • `let` 和 `const` 可用于 ie11,当不在 for 循环中使用时。它是 ei11 实际支持的唯一 es6 功能之一。(具有有限的`Map` 和`Set` 以及其他一些杂项功能) (2认同)

Sco*_*tyG 7

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

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

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