如何在IE11中实现承诺


76

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

3
ie11没有es2015
Nina Scholz

10
IE11既不支持箭头功能也不支持本地Promises。使用JS转译器(如babel)或不使用ES6功能。对于Promise支持,您可以使用bluebird之类的库。
Tomalak

4
(顺便说一句,请注意caniuse.com如何显示该代码也无法在IE11以外的其他浏览器上运行。养成检查在那里要使用的JS,CSS或HTML功能的支持程度的习惯。)
Tomalak


2
如果您使用Babeljs来转换代码,则可以安装“ es2015-ie”预设以及“ babel-polyfill” npm模块,以解决与IE的兼容性问题,并避免其他与IE相关的其他问题
Ilia Talalai

Answers:


103

如果您希望这种类型的代码在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>

4
我猜也可以使用jquery.deffered,大概从6+开始就可以支持jquery.deffered,这也是为什么jquery deffered的原因,因为jquery是一个非常流行和有用的库,并且在包含JS内容的大型项目中很多时候都使用过,大多数,如果他们使用的是库,那么他们大多也会使用Jquery。这样一来,您就无需为项目添加其他依赖关系,并且可以使团队负责人/项目经理更加快乐
Shreyan Mehta,

@ShreyanMehta-是的,可以使用jQuery Promise(及其非标准实现)代替ES6 Promise语法,但是OP似乎在询问使用new Promise()哪种不是jQuery支持的语法。对于其他承诺库(例如Q),也可以这样说,它们与较旧的浏览器兼容,但具有自己的非标准语法。
jfriend00

2
@ShreyanMehta我不会只为http请求包括jQuery。当像Bluebird或Axios这样的更小,更具焦点的库更好时,这是一个很大的负担。我认为这些天没有人比其他库更喜欢jQuery,除非该项目已经在所有方面使用jQuery。
elliottregan

2
@elliottregan好吧,对我来说这是一个很好的学习。感谢您的反馈。
Shreyan Mehta,

2
let并且const可与IE11,当在不使用循环。它是ei11实际支持的仅有的es6功能之一。(具有有限的MapSet以及一些其他杂项功能)
费利克斯深色

3

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

像这样使用:https : window.Promise //www.npmjs.com/package/promise-polyfill

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


1
这用于为赢得表单WebBrowser控件添加承诺支持(当Windows将IE 11用于其仿真版本时)。
clamchoda
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.