承诺在 IE11 上不起作用

Posted

技术标签:

【中文标题】承诺在 IE11 上不起作用【英文标题】:Promises not working on IE11 【发布时间】:2016-05-16 04:13:16 【问题描述】:

我是 javascript Promises 的新手,所以我希望有人能帮助我解决这个问题。

问题: Promise 无法在 IE11 上执行,在 Chrome 和 FireFox 上运行良好

使用的框架:我尝试使用 es6-promise.d.ts 和 bluebird.d.ts 结果相同。

代码:

static executeSomething(): Promise<any> 

  console.log("inside executeSomething");
  var test= new Promise((resolve, reject)=>
  
     console.log("inside Promise");

  ).catch(function(error)console.log("error")); 
 console.log("after promise"); 
 return test;      

结果: 在 chrome 和 Firefox 上我可以看到所有日志,但在 IE11 上我只看到“Inside executeSomething”,这意味着问题出在创建 Promise 时。

我以为是因为 IE11 不支持 es6,但是我使用 bluebird 得到了相同的结果,我希望有些人可以为我的问题带来一些启示。

【问题讨论】:

IE11 不支持 es6 承诺。 kangax.github.io/compat-table/es6/#ie11 【参考方案1】:

您需要在页面中包含一个 promise polyfill,IE11 才能正常工作。

您使用 es-promise 的直觉是正确的,但您还需要在 html 中包含 .js 文件

<script src="path/to/es6-promise.js"></script>

.d.ts 文件将为 TypeScript 编译器提供它的定义,但不影响运行时。你仍然需要在你的 html 中包含 polyfill,它才能在浏览器中实际运行。

使用 TypeScript 或任何编译语言时要记住的最重要的事情是 compile 时间和 run 时间之间的差异。

.d.ts.ts.tsx等都是编译时间文件。这意味着这些不是实际执行的文件,而是生成运行时代码的文件。

.js 文件是 runtime 文件。这些是浏览器运行的文件。

.d.ts 文件确实包含代码,而是代码签名的定义,因此应该始终伴随相应的.js 文件将运行在浏览器中。

【讨论】:

es6-promise 是一个糟糕的承诺 polyfill,因为它的价值。 谢谢!!!这只发生在 IE 上,不知道为什么,但添加引用解决了我的问题。 @BenjaminGruenbaum,你对更好的 polyfill 有什么建议吗? 我听说 lie.js 不错,但我主要还是用 bluebird。甚至 core-js 的 polyfill 也不错。

以上是关于承诺在 IE11 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

折叠在 IE11 上不起作用(Object.keys:参数不是对象)

HTML5 拖放在 IE11 上不起作用

axios IE 承诺不起作用

Less Css 在 IE8 和 IE7 上不起作用

动态加载 css 样式表在 IE 上不起作用

hide() 和 on() 在 Internet Explorer (IE) 上不起作用