【问题标题】:Promises not working on IE11承诺在 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 得到了相同的结果,我希望有些人可以为我的问题带来一些启示。

【问题讨论】:

标签: javascript typescript promise bluebird es6-promise


【解决方案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 也不错。
猜你喜欢
  • 2017-04-29
  • 2016-06-07
  • 2016-06-16
  • 2016-05-07
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多